<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hifi-remote.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Robman</id>
	<title>JP1 Remotes Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hifi-remote.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+Robman"/>
	<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php/Special:Contributions/The_Robman"/>
	<updated>2026-05-14T08:51:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=JP1_Cables&amp;diff=3440</id>
		<title>JP1 Cables</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=JP1_Cables&amp;diff=3440"/>
		<updated>2026-04-09T12:16:07Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Older EEPROM based JP1 remotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;JP1 Interfaces&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
In order to use the JP1 software to program your remote, you need an interface to connect the remote to your computer, for which several models now include a USB lead as original equipment. Otherwise you can build your own or purchase one from any one of several vendors. The first JP1 remotes had the same interface. But over the years, new types of JP1 remotes have been introduced which require different interfaces, the latest being USB. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lists of JP1 remotes and the type of interface each requires can be found at [[RemoteChart]]&amp;lt;br&amp;gt; &lt;br /&gt;
- and the technical details with a brief history of JP1 interface designs at &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.hifi-remote.com/forums/dload.php?action=download&amp;amp;file_id=5204&lt;br /&gt;
&lt;br /&gt;
==Interface Types==&lt;br /&gt;
UEI is the maker of all JP1 remotes. They change the way they build remotes every so often such that they require a different type of interface. There are currently two basic types of JP1 interfaces: JP1 (Flash) and JP1 (EEPROM). Their older remotes had a separate MCU chip and an EEPROM chip, with all the JP1 activity occurring on the EEPROM chip, so it didn&#039;t matter what brand and model of MCU they used because the access to the EEPROM was the same. These remotes are called JP1 or &amp;quot;JP1 (EEPROM)&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Then they switched to using flash based MCU chips, which meant it was no longer necessary to have a separate EEPROM chip. The protocol needed to access the flash chip is completely different to that needed to access the old EEPROM chips. Furthermore, the access method sometimes changes when they switch from one brand of flash chip to another. All these flash based JP1 remotes are called &amp;quot;JP1 (Flash)&amp;quot; (also JP1.x, JP1.1, JP1.2, JP1.1/2, JP1.2/3 or JP1.3). Below are the different types of JP1 remotes, where the type is indicated on the circuit board beside the JP1 connector. However in some cases the connector may be mislabeled.&lt;br /&gt;
&lt;br /&gt;
JP1 indicates a remote with an EEPROM chip. (random signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
JP1.1 indicates a remote with an SST brand flash chip. (CS30xxxx alpha-numeric signatures, only used in 4 Comcast remotes)&amp;lt;br&amp;gt;&lt;br /&gt;
JP1.2 indicates a remote with a Motorola HCS08 flash chip. (1xxx1xxx numeric signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
JP1.3 indicates a remote with a Samsung S3F8 flash chip. (3xxx3xxx numeric signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
JP1.4 indicates a remote with a Samsung S3F8 flash chip.* (3xxxxx numeric signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
JP2 indicates a remote with a Maxim MAXQ622 flash chip.* (2xxxxx numeric signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
JP2 also indicates a remote with a Texas Instruments TI2541 flash chip.* (6xxxxx numeric signatures)&amp;lt;br&amp;gt;&lt;br /&gt;
Mini-USB or Micro-USB indicates a remote which is supplied with a USB cable. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* JP1.4 and JP2 remotes use a &amp;quot;segment&amp;quot; memory structure, which is completely different that all previous remotes.&lt;br /&gt;
&lt;br /&gt;
Some JP1 (Flash) cables will work with both JP1.1 and JP1.2, but NOT JP1.3, these are usually called JP1.1/2 (Flash) cables. &lt;br /&gt;
&lt;br /&gt;
Some JP1 (Flash) cables will work with both JP1.2 and JP1.3, but NOT JP1.1, these are usually called JP1.2/3 (Flash) cables. &lt;br /&gt;
&lt;br /&gt;
If you have a JP1 (Flash) cable, you can use a special &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.diygadget.com/remote-control-accessories/jp1-2-1-3-to-jp1-adapter &amp;quot;JP1 EEPROM Programming Adapter&amp;quot;] to program a JP1 (EEPROM) remote. There are many advantages to this approach since JP1 (Flash) interfaces are compatible with the latest operating systems and I/O ports, and the old style JP1 cables are no longer available.&lt;br /&gt;
&lt;br /&gt;
Some remotes have additional constraints related to the JP1 pins that require special consideration. The Radio Shack 15-133, 134 and 135 models have a smaller opening that the standard plug will not fit. In this case, you can remove the outer clip from the connector and reinforce with super glue, or purchase a cable with a smaller connector or an an adapter with a smaller connector. Some models are JP1 compatible but not &amp;quot;JP1 Ready&amp;quot;, having no pins, but pads where the pins should be. In this case an adapter with pogo pins (spring loaded pins for making good contact with the pads) can be used. The connector is held against the pins when communicating with the remote. Some models have no pads at all, so a connector must be soldered to various points on the circuit board, like on the Radio Shack 15-100. Some models, like the URC-6131, require both an EEPROM chip and a connector to be soldered in.&lt;br /&gt;
&lt;br /&gt;
==FTDI and Prolific cables on eBay==&lt;br /&gt;
There are many cables on eBay which will function as JP1.x cables.  In order for the cable to work, it must have 6 connectors, there are many cables out there with only 4 connectors, these won&#039;t work because the RTS line is not exposed.  These cables either come with 6 individual connectors, or one flat 1*6 connector.  In order to make these ideal JP1.x cables, the supplied connectors should be replaced with a 2*3 DuPont connector.  However, the cables with 6 individual connectors will work, it&#039;s just a lot more fiddly to connect them to your remote.&lt;br /&gt;
&lt;br /&gt;
Two types of cable that are known to work are the FTDI FT232RL and the Prolific PL2303HXD. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE REMEMBER that the colors are not always the same, so please check what each connector is really for.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:FTDI cable.jpg]] [[Image:Prolific cable.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Cable color codes===&lt;br /&gt;
The pin codes for these cables are (&#039;&#039;&#039;NOTE: colors can vary in different cables&#039;&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pin - color - type&#039;&#039;&#039;&lt;br /&gt;
:1 - (empty):VDD&lt;br /&gt;
:2 - RTS (usually Yellow)&lt;br /&gt;
:3 - GND (usually Black)&lt;br /&gt;
:4 - TXD (usually Green)&lt;br /&gt;
:5 - (empty)&lt;br /&gt;
:6 - RXD (usually White)&lt;br /&gt;
:&#039;&#039;CTS (usually Blue, not connected)&#039;&#039;&lt;br /&gt;
:&#039;&#039;5V (usually Red, not connected)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Special note:&#039;&#039;&#039; If your remote has a 24-pin S3F80P5X chip, like the URC-2020B0-B1, URC-2025, URC-2060BC0 and URC-625000-04R00, connect the RTS line to pin1 instead of pin2, and &amp;lt;u&amp;gt;take the batteries out of the remote&amp;lt;/u&amp;gt; when programming it with RMIR. &#039;&#039;(More info: [http://www.hifi-remote.com/forums/viewtopic.php?p=149512#149512 here])&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Unusual FTDI cable.jpg|right]]&lt;br /&gt;
&#039;&#039;&#039;If your cable has pink and grey wires, this might be the pinout:&#039;&#039;&#039;&lt;br /&gt;
:Red 5v&lt;br /&gt;
:Black GND&lt;br /&gt;
:White RXD&lt;br /&gt;
:Teal/Green TXD&lt;br /&gt;
:Pink CTS (instead of blue)&lt;br /&gt;
:Grey RTS (instead of yellow)&lt;br /&gt;
&lt;br /&gt;
For remotes with a 5-hole connector (like the URC-2025):&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;[NOTE: remove the batteries while using RMIR]&#039;&#039;&#039;&lt;br /&gt;
:1 - RTS (usually Yellow)&lt;br /&gt;
:2 - (empty)&lt;br /&gt;
:3 - GND (usually Black)&lt;br /&gt;
:4 - TXD (usually Green)&lt;br /&gt;
:5 - RXD (usually White)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Older EEPROM based JP1 remotes===&lt;br /&gt;
One option is make an interface using an Arduino board, see:&lt;br /&gt;
* [[Building the Arduino Interface for older remotes]]&lt;br /&gt;
&lt;br /&gt;
To make an FTDI cable work with older EEPROM based JP1 remotes, you&#039;ll need a DIY Gadget JP1 EEPROM programming adapter $10 (+ $4 shipping):&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.diygadget.com/remote-control-accessories/jp1-2-1-3-to-jp1-adapter&amp;lt;/span&amp;gt;.  &lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
These adapters usually do not have pin1 marked.  To find pin1, feel the adapter over the heat shrink tubing and you&#039;ll notice that one side is flat whereas you can feel the components on the other side.  Looking at the flat side, pin1 is marked with white dots in this photo:&lt;br /&gt;
&lt;br /&gt;
[[Image:JP1 Adapter.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want a 6-pin DuPont plug for the end, click below (select 2x3P):&amp;lt;br/&amp;gt;&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.ebay.com/itm/335426536170&amp;lt;/span&amp;gt; (qty=20 and up)&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.ebay.com/itm/166241714052&amp;lt;/span&amp;gt; (qty=50)&lt;br /&gt;
&lt;br /&gt;
To remove the existing DuPont connector, use a blade and pop up the plastic tab over each connector and then pull the wire out.  With the new connector, just slide each wire into the appropriate slot, with the connector tab facing up so that it pops out of the little window.&lt;br /&gt;
&lt;br /&gt;
The following pic shows how the pins are numbered for the 6-pin connector in the remote itself:&lt;br /&gt;
&lt;br /&gt;
[[Image:JP1 pins.jpg]] [[Image:JP1 6pin.jpg]] [[Image:JP1 pins3.jpg]] &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This video shows you how to connect the cable:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.youtube.com/watch?v=cLYzsh-usTo&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See this for other cheap cable sources:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://www.hifi-remote.com/forums/viewtopic.php?t=16200&lt;br /&gt;
&lt;br /&gt;
==Interface Designs==&lt;br /&gt;
There are many different interface designs. JP1 (EEPROM) interfaces include the &amp;quot;Simple&amp;quot; design which connects to your PC&#039;s parallel printer port and a USB design. JP1 (Flash) interfaces include two serial designs (one with discrete transistors and another with an IC), as well as a USB design. The serial interfaces are compatible with serial ports and with USB to Serial adapters. The parallel interfaces are compatible with parallel ports and parallel PCI or PCMCIA adapters. They are not compatible with USB to parallel printer adapters. Below are several interface design and troubleshooting documents.&lt;br /&gt;
&lt;br /&gt;
EEPROM Interfaces: &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=49&amp;lt;br&amp;gt;&lt;br /&gt;
Flash Interfaces: &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=121&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface Vendors==&lt;br /&gt;
JP1 is a hacker project. Most JP1 interfaces are hand made. You won&#039;t find a JP1 interface at any retailer. However, there are now some generic USB-Serial interfaces available on ebay that will work for JP1.1 and above. Since the hand made interfaces aren&#039;t mass produced, there are no economies of scale. So the interface can more than the remote. But this is still a great value since a JP1 remote with its interface cable and software becomes as functional as remotes costing 10 times as much. Below is a list of JP1 interface vendors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.hifi-remote.com/forums/viewtopic.php?t=9405 Tommy Tyler]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.diygadget.com/jp1-1-1-1-2-1-3-cables.html DIY Gadget]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.txsat.net/ TX SAT Electronics]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.hifi-remote.com/forums/viewtopic.php?t=16360 Generic FTDI USB-Serial (cheapest option)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Interface Drivers==&lt;br /&gt;
The drivers for JP1 (Flash) interfaces are built in to the latest Windows OSs. They use a chip from FTDI. Drivers for JP1 (EEPROM) USB interfaces are supplied by Delcom, the maker of the chip in these interfaces. The Delcom drivers can be problematic and do not work with the latest 64-bit Windows OSs. There are several versions available with which users have varying degrees of success. There is also a generic WinUSB driver for JP1 (EEPROM) USB interfaces which is compatible with modern OSs. JP1 (EEPROM) parallel interfaces do not require a driver.&lt;br /&gt;
&lt;br /&gt;
===JP1 (EEPROM) Drivers===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.delcomproducts.com/productdetails.asp?PartNumber=890520&lt;br /&gt;
&lt;br /&gt;
===JP1 (Flash) Drivers===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.ftdichip.com/Drivers/D2XX.htm&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PDF Using Legacy Interfaces on Windows 10 ===&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=25588&lt;br /&gt;
&lt;br /&gt;
===Prolific Drivers on Windows 10 ===&lt;br /&gt;
JP1 (Flash) interface cables using a non-genuine Prolific chip will be automatically disabled by default in Windows 10. To work around this issue, install the alternate driver below which bypasses the genuine hardware check, and prevent the genuine driver from reinstalling by following the steps below:&lt;br /&gt;
:1. Download the alternate Prolific Windows 10 driver:&lt;br /&gt;
::*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=25608&lt;br /&gt;
:2. Download the &amp;quot;Show or Hide Updates&amp;quot; troubleshooter tool from Microsoft or mirror copy:&lt;br /&gt;
::*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;https://support.microsoft.com/en-us/topic/how-to-temporarily-prevent-a-driver-update-from-reinstalling-in-windows-10-17df0ef3-7480-36e9-0ed9-118351398897&lt;br /&gt;
::*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=26315&lt;br /&gt;
:3. Plug in interface cable.&lt;br /&gt;
:4. In device manager, locate non-genuine Prolific device under Ports, Right-click and uninstall current driver.&lt;br /&gt;
:5. Leave cable plugged in and run the PL2303_64bit_Installer downloaded in step 1.&lt;br /&gt;
:6. Click &amp;quot;Continue&amp;quot; when prompted.&lt;br /&gt;
:7. Reboot when prompted, leaving cable plugged in.&lt;br /&gt;
:8. Run the troubleshooter downloaded in step 2 (wushowhide tool).&lt;br /&gt;
:9. Click &amp;quot;Hide&amp;quot; and choose the genuine Prolific driver, then click next (Windows reports problem is &amp;quot;fixed&amp;quot; and hides the driver).&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Guide_to_identifying_Atlas_remotes&amp;diff=3439</id>
		<title>Guide to identifying Atlas remotes</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Guide_to_identifying_Atlas_remotes&amp;diff=3439"/>
		<updated>2025-12-07T15:30:21Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Atlas remotes==&lt;br /&gt;
UEIC manufactures remotes for a number of cable providers and other companies.  One of the currently most widespread styles is the &amp;quot;Atlas 5-Device&amp;quot; remote.  They go by various names (Atlas 5-Device, Atlas DVR, Atlas DVR/PVR, Atlas 5-Device DVR/PVR, Atlas 5-Device DVR/PVR (day), Atlas OCAP, etc...) and come from various providers (Comcast, Cox, Time Warner, TWC, Rogers, Scientific Atlanta, and others..).&lt;br /&gt;
&lt;br /&gt;
There are &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://web.archive.org/web/20081217041606/http://www.urcsupport.com/ several variants of these remotes]&amp;lt;/span&amp;gt;, and sometimes it is difficult to tell them apart.  &#039;&#039;(Heck, even on the UEIC page linked above, if you look closely you will see that they show some of the same models TWICE iwth links to different manuals&#039;&#039; The variants seen to date are listed in [[Guide to identifying Atlas remotes#Known_variants|this chart]]&amp;lt;/span&amp;gt;.  In UEIC nomenclature they are (from left to right):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Atlas DVR  (1054);&lt;br /&gt;
Atlas DVR (day) (1055); &lt;br /&gt;
and&lt;br /&gt;
Atlas OCAP DVR (1056 and 1056BC)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Atlas5-DeviceSettings.jpg]]&lt;br /&gt;
[[Image:AtlasDVR_PVR2.jpg]]&lt;br /&gt;
[[Image:Atlas-OCAP-1056-1.jpg]]&lt;br /&gt;
[[Image:AtlasOCAPSilverDVR-PVR2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Here are two pictures of a URC-1056 Atlas OCAP Black Remote with backlighting:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Atlas-std.jpg]]&lt;br /&gt;
[[Image:Atlas-backlit.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Atlas DVR (1054)==&lt;br /&gt;
* has a &amp;quot;Menu&amp;quot; key centered directly above the &amp;quot;Up arrow&amp;quot; key;&lt;br /&gt;
* has a &amp;quot;Settings&amp;quot; key (single function) to the left of the &amp;quot;Left Arrow&amp;quot; key;&lt;br /&gt;
* is a &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP1&#039;&#039;&#039;&amp;lt;/span&amp;gt; remote with &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;signature SA_7SA_7&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a 1K factory EEPROM (can be replaced/upgraded by the user)&lt;br /&gt;
&lt;br /&gt;
==Atlas DVR (day) (1055)==&lt;br /&gt;
* has the key above the &amp;quot;Up Arrow&amp;quot; key labelled &amp;quot;Settings&amp;quot; AND &amp;quot;Menu&amp;quot;;&lt;br /&gt;
* replaces the key to left of the &amp;quot;Left Arrow&amp;quot; key with a rocker key labelled &amp;quot;Day&amp;quot; with a &amp;quot;+&amp;quot;and &amp;quot;-&amp;quot; direction;&lt;br /&gt;
* # button (to the right of 0) has a secondary label of HD/Zoom vs. ENTER&lt;br /&gt;
* is a &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.2 or JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt; remote;&lt;br /&gt;
* there are SEVERAL signatures identified (and RDFs created) to date, including:&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;10251025&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;JP 1.2 - labelled JP1&amp;lt;/span&amp;gt;&#039;&#039;&#039;) has about 3.5K of equivalent &amp;quot;EEPROM&amp;quot; memory;&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30003000&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) all of the JP1.3&#039;s have about 4.5K of equivalent &amp;quot;EEPROM&amp;quot; memory;&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30323032&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;); and &lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30333033&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) - signature shared with the 1056 OCAP remote.&lt;br /&gt;
&lt;br /&gt;
==Atlas OCAP (1056 and 1056BC)==&lt;br /&gt;
* (has a few more evident external differences):&lt;br /&gt;
* Separate &amp;quot;Menu&amp;quot; and &amp;quot;Settings&amp;quot; keys;&lt;br /&gt;
* &amp;quot;Exit&amp;quot; key moved up ABOVE the arrow key array;&lt;br /&gt;
:* this results in FIVE buttons between the &amp;quot;UP Arrow&amp;quot; and the Device keys rather than just the three on the other 2 remotes;&lt;br /&gt;
* there is an extra &amp;quot;D&amp;quot; key next to the three &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, and &amp;quot;C&amp;quot; keys;&lt;br /&gt;
* Adds alphabetic characters to the numeric keys (like a phone keypad);&lt;br /&gt;
* has the middle &amp;quot;F&amp;quot; button enlarged, painted white, and labelled &amp;quot;ON DEMAND&amp;quot;, whilst the other &amp;quot;F&amp;quot; keys are shrunken circular buttons;&lt;br /&gt;
* has a silver-colored variant (1056BC);&lt;br /&gt;
* shares signature &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30333033&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) with one of the 1055s above - a modified rdf is available.&lt;br /&gt;
* has about 4.5K of equivalent &amp;quot;EEPROM&amp;quot; memory.&lt;br /&gt;
&lt;br /&gt;
==Featires==&lt;br /&gt;
ALL of these remotes:&amp;lt;br&amp;gt;&lt;br /&gt;
* may or may not have learning capability.  I expect the 1054 has no learning variant.  At least the 1K EEPROM would suggest that is the case.  Depending upon the cable provider&#039;s requirements with UEIC, the additional circuitry and alternate EEPROM size may be missing.  There is no readily apparent way to tell this without opening up the remote &#039;&#039;&#039;&#039;&#039;(or simply trying to learn, I suppose).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* may or may not have UHF capability.  There is an &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/app.php/file?file_id=4620 FCC document]&amp;lt;/span&amp;gt; indicating at least one version of the 30323032 URC-1055 (oddly enough it is internally labelled as a URC-2150(?!)) has a UHF transmitter compatible with certain Cable boxes.  This would have no effect on JP1 programming;&lt;br /&gt;
&lt;br /&gt;
* may or may not have backlighting.  Of the Atlases I have seen personally or referred to in these fora, the 1056 (both colors) is the only one to have confirmed backlighting as an option;&lt;br /&gt;
&lt;br /&gt;
* have three keys just below the &amp;quot;Mute&amp;quot;and &amp;quot;Last&amp;quot; keys that will have tailored labels for the cable provider. [size=75]&#039;&#039;Note the difference in the 1056 OCAP remote in this regard.&#039;&#039;[/size]  In UEIC literature, on the 1054 and 1055s, these unlabelled keys are referred to as &amp;quot;TuneIn1&amp;quot;, &amp;quot;TuneIn2&amp;quot;, and &amp;quot;TuneIn3&amp;quot;, and on the 1056, they are labelled &amp;quot;F1&amp;quot;, &amp;quot;On Demand&amp;quot;, and &amp;quot;F2&amp;quot; respectively.  Although they may have different labels in a particular cable provider&#039;s application, these are the names used in the software tools;&lt;br /&gt;
&lt;br /&gt;
* most of these remotes have a silkscreened marking next to the 6-pin connector identifying whether it is JP 1, JP 1.2 (see the comment about the 10251025) or JP 1.3, but some may not.  As only the 1054 is JP1 and the others are JP 1.x, it&#039;s no problem simply connecting the appropriate cable and downloading from the remote to identify what signature it has, and IR should automatically select the correct rdf (unless it&#039;s another new one [[Image:icon_rolleyes.gif]] )&lt;br /&gt;
&lt;br /&gt;
==Known variants==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UEIC Support pg nomenclature !! Atlas 5 variant !! RDF !! Color !! Backlight !! Learning !! Silkscreen Label !! Battery Compartment Label&lt;br /&gt;
|-&lt;br /&gt;
| URC-1054 || &amp;quot;settings&amp;quot; || SA_7SA_7 || rowspan=&amp;quot;11&amp;quot;| BLACK || NO || NO ||  || 1054-XXX-0001-001&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;7&amp;quot;| URC-1055 || rowspan=&amp;quot;7&amp;quot;| &amp;quot;day&amp;quot; || rowspan=&amp;quot;2&amp;quot;| 10251025 || NO || NO ||  || 1055BC0&lt;br /&gt;
|-&lt;br /&gt;
| NO || YES ||  || 11055BC0&lt;br /&gt;
|-&lt;br /&gt;
|  rowspan=&amp;quot;2&amp;quot;| 30003000 || NO || NO ||  || 1055BC1; 1055BA1&lt;br /&gt;
|-&lt;br /&gt;
| NO || YES ||  || 11055BA1-XXX-0001-001&lt;br /&gt;
|-&lt;br /&gt;
|  30323032 || NO || NO ||  || 1055BC2&lt;br /&gt;
|-&lt;br /&gt;
|  rowspan=&amp;quot;2&amp;quot;| 30333033 || NO || NO ||  || 1055BC2&lt;br /&gt;
|-&lt;br /&gt;
|  NO || YES ||  || 11055BA2&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;3&amp;quot;| URC-1056 || rowspan=&amp;quot;4&amp;quot;| &amp;quot;OCAP&amp;quot; ||rowspan=&amp;quot;4&amp;quot;|  30333033 || NO || NO || 1056B01 || 1056BG1&lt;br /&gt;
|-&lt;br /&gt;
|  YES || NO || 1056B01 || 1056BC1-BXX-001-0001-001-R&lt;br /&gt;
|-&lt;br /&gt;
|  YES || YES || 1056B01-L || 1056BC1-BLX-XXX-0001-001-R&lt;br /&gt;
|-&lt;br /&gt;
| URC-1056BC || SILVER || YES || YES || 1056B01-L || 1056BC1-BLS-XXX-0001-001-R&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Talk:Guide_to_identifying_Atlas_remotes&amp;diff=3438</id>
		<title>Talk:Guide to identifying Atlas remotes</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Talk:Guide_to_identifying_Atlas_remotes&amp;diff=3438"/>
		<updated>2025-12-01T01:41:34Z</updated>

		<summary type="html">&lt;p&gt;The Robman: Created page with &amp;quot;This article was copied from the following post by [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=304 Capn Trips]:&amp;lt;br&amp;gt; https://www.hifi-remote.com/forums/viewtopic.php?t=8508  There is some discussion after the initial post.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article was copied from the following post by [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=304 Capn Trips]:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.hifi-remote.com/forums/viewtopic.php?t=8508&lt;br /&gt;
&lt;br /&gt;
There is some discussion after the initial post.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Main_Page&amp;diff=3437</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Main_Page&amp;diff=3437"/>
		<updated>2025-12-01T01:39:53Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* JP1 Guides */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;(Back to &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums JP1 Forums]&amp;lt;/span&amp;gt;)&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Welcome to the JP1 community Wiki site.  A collaborative website relative to the JP1 community to which anyone can contribute!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039;  The Wiki section of this website has a different account system than the Forums, so please don&#039;t try to log onto the Wiki using your JP1 account id.  If you wish to contribute, please see the [[Main Page#Note to new Wiki users|Note to new Wiki users]] below, and one of us will create a Wiki account for you.&lt;br /&gt;
&lt;br /&gt;
==JP1 Guides== &lt;br /&gt;
*[[JP1_Introduction|Introduction to JP1]]&lt;br /&gt;
*[[The History of the JP1 Project]]&lt;br /&gt;
*[[JP1 - Just How Easy Is It?]]&lt;br /&gt;
*[[The WHAT and WHY of JP1]]&lt;br /&gt;
*[[Creating A Better Upgrade]]&lt;br /&gt;
*[[JP1 Cables]]&lt;br /&gt;
*[[Building the Arduino Interface for older remotes]]&lt;br /&gt;
*[[Hacking JP1 Remotes]]&lt;br /&gt;
*[[Extenders (an FAQ)]]&lt;br /&gt;
*[[Infrared Signals]]&lt;br /&gt;
*[[How to use RIDgen]]&lt;br /&gt;
*[[IrScrutinizer Guide]]&lt;br /&gt;
*[[ToadTog]]&lt;br /&gt;
*[[Getting started with Xsight and Nevo]]&lt;br /&gt;
*[[Xsight_Disassembly]]&lt;br /&gt;
*[[Importing Foreign IR Remotes in RemoteMaster]]&lt;br /&gt;
*[[Using URC6440 and OARUSB04G Remotes with Linux]]&lt;br /&gt;
*[[Guide to identifying Atlas remotes]]&lt;br /&gt;
&lt;br /&gt;
==Manuals==&lt;br /&gt;
*[[Manuals|Remote Manuals]]&lt;br /&gt;
*[[Remote Master Manual]] (not complete)&lt;br /&gt;
*[[IR Help]]&lt;br /&gt;
*[[Protocol Builder]]&lt;br /&gt;
*[[IR Scope and IR Widget User&#039;s Guide]]&lt;br /&gt;
*[[DecodeIR]]&lt;br /&gt;
*[[AIRWidget and IRScope Operating Instructions]]&lt;br /&gt;
*[[The 3660 family|The 3660 family of remotes]]&lt;br /&gt;
*[[INT-422|Programming an INT-422-4 Remote]]&lt;br /&gt;
*[[WAV FILES]]&lt;br /&gt;
&lt;br /&gt;
==General Remote Guides==&lt;br /&gt;
*[[Manual Programming - 9xx Commands]]&lt;br /&gt;
*[[Manual Programming - Sky Remotes]]&lt;br /&gt;
*[[Master Reset Instructions]]&lt;br /&gt;
*[[Modem Upgrade Procedure]]&lt;br /&gt;
*[[The Correct Learning Procedure]]&lt;br /&gt;
*[[RemoteChart]]&lt;br /&gt;
&lt;br /&gt;
==Website Archives==&lt;br /&gt;
The following are official websites that are no longer active, that have been archived here at hifi-remote.com.&lt;br /&gt;
*[https://www.hifi-remote.com/radioshack/ Radio Shack remotes page]&lt;br /&gt;
*[https://www.hifi-remote.com/rcinfo/ Radio Shack&#039;s www.rcinfo.com site]&lt;br /&gt;
*[https://www.hifi-remote.com/ofaold/ One For All backup #1]&lt;br /&gt;
*[https://www.hifi-remote.com/ofausa/ One For All backup #2]&lt;br /&gt;
*[https://www.hifi-remote.com/ofa-int/ One For All International]&lt;br /&gt;
*[https://www.hifi-remote.com/urc/ UEI&#039;s cable remotes page]&lt;br /&gt;
*[https://www.hifi-remote.com/hag/ Hudson Access Group&#039;s OFA page]&lt;br /&gt;
&lt;br /&gt;
The following are user-maintained sites that are no longer available.&lt;br /&gt;
*[https://www.hifi-remote.com/wasser/ John Wasser&#039;s old OFA site]&lt;br /&gt;
*[https://www.hifi-remote.com/ziggr/ Zig&#039;s Amazing IR Remote Control Page]&lt;br /&gt;
*[https://www.hifi-remote.com/huras/ Dave Huras&#039;s X10 and OFA Page]&lt;br /&gt;
*[https://www.hifi-remote.com/sony/ Rob Humphrey&#039;s Sony codes page]&lt;br /&gt;
&lt;br /&gt;
==Slingbox==&lt;br /&gt;
*[[How to Install a Custom Remote onto the Slingbox]]&lt;br /&gt;
*[[Customising the Remote Image on your Slingplayer]]&lt;br /&gt;
*[[How to Create Custom Remote Controls and use them on your Slingbox]]&lt;br /&gt;
*[https://www.hifi-remote.com/forums/viewforum.php?f=19 Slingbox forum]&lt;br /&gt;
*[https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=97 Slingbox files] (inactive)&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://controlremote.sourceforge.io/ Remote Master Download]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.oracle.com/java/technologies/downloads/ Java Runtime Download (for Remote Master)]&amp;lt;/span&amp;gt;&lt;br /&gt;
*[[IRP Notation]]&lt;br /&gt;
*[[DecodeIR]]&lt;br /&gt;
*[[Working With Pronto Hex]]&lt;br /&gt;
*[[JP1 versus Harmony]]&lt;br /&gt;
*[[Technical Documents]]&lt;br /&gt;
*[[Glossary]]&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums JP1 Forums]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/dload.php JP1 Files]&amp;lt;/span&amp;gt; (inactive)&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.getzweb.net/jp1/ JP1 Lookup Tool]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.youtube.com/watch?v=ubrq9Pr3Y1Y&amp;amp;list=PLXmyroJbN9CAxc6vADS4iiXQT3fp0c-Iq JP1 &amp;quot;How To&amp;quot; Videos]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Lutron-Master-List.xls Lutron Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/IR_AVR_121.xls Onkyo Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Pioneer_Master_List.rmdu Pioneer Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Sanyo_Projector_Master.rmdu Sanyo Projector Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/sony/ Sony Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Yamaha-Master.zip Yamaha Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Note to new Wiki users==&lt;br /&gt;
Due to the incredibly high number of spam accounts being created on this wiki, we have been forced to disable the New Account feature.  If you wish to contribute to the wiki, please contact any of the following via the main JP1 Forum: &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=2 Rob]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350 Vicky]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=13357 3FG]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=823 xnappo]&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=343 mdavej]&amp;lt;/span&amp;gt;.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Guide_to_identifying_Atlas_remotes&amp;diff=3436</id>
		<title>Guide to identifying Atlas remotes</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Guide_to_identifying_Atlas_remotes&amp;diff=3436"/>
		<updated>2025-12-01T01:39:26Z</updated>

		<summary type="html">&lt;p&gt;The Robman: Initial draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Atlas remotes==&lt;br /&gt;
UEIC manufactures remotes for a number of cable providers and other companies.  One of the currently most widespread styles is the &amp;quot;Atlas 5-Device&amp;quot; remote.  They go by various names (Atlas 5-Device, Atlas DVR, Atlas DVR/PVR, Atlas 5-Device DVR/PVR, Atlas 5-Device DVR/PVR (day), Atlas OCAP, etc...) and come from various providers (Comcast, Cox, Time Warner, TWC, Rogers, Scientific Atlanta, and others..).&lt;br /&gt;
&lt;br /&gt;
There are &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://web.archive.org/web/20081217041606/http://www.urcsupport.com/ several variants of these remotes]&amp;lt;/span&amp;gt;, and sometimes it is difficult to tell them apart.  &#039;&#039;(Heck, even on the UEIC page linked above, if you look closely you will see that they show some of the same models TWICE iwth links to different manuals&#039;&#039; The variants seen to date are listed in [[Atlas Chart|this chart]]&amp;lt;/span&amp;gt;.  In UEIC nomenclature they are (from left to right):&lt;br /&gt;
&lt;br /&gt;
Atlas DVR  (1054);&lt;br /&gt;
Atlas DVR (day) (1055); &lt;br /&gt;
and&lt;br /&gt;
Atlas OCAP DVR (1056 and 1056BC)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Atlas5-DeviceSettings.jpg]]&lt;br /&gt;
[[Image:AtlasDVR_PVR2.jpg]]&lt;br /&gt;
[[Image:Atlas-OCAP-1056-1.jpg]]&lt;br /&gt;
[[Image:AtlasOCAPSilverDVR-PVR2.jpg]]&lt;br /&gt;
&lt;br /&gt;
Here are two pictures of a URC-1056 Atlas OCAP Black Remote with backlighting:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Atlas-std.jpg]]&lt;br /&gt;
[[Image:Atlas-backlit.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Atlas DVR (1054)==&lt;br /&gt;
* has a &amp;quot;Menu&amp;quot; key centered directly above the &amp;quot;Up arrow&amp;quot; key;&lt;br /&gt;
* has a &amp;quot;Settings&amp;quot; key (single function) to the left of the &amp;quot;Left Arrow&amp;quot; key;&lt;br /&gt;
* is a &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP1&#039;&#039;&#039;&amp;lt;/span&amp;gt; remote with &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;signature SA_7SA_7&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
* has a 1K factory EEPROM (can be replaced/upgraded by the user)&lt;br /&gt;
&lt;br /&gt;
==Atlas DVR (day) (1055)==&lt;br /&gt;
* has the key above the &amp;quot;Up Arrow&amp;quot; key labelled &amp;quot;Settings&amp;quot; AND &amp;quot;Menu&amp;quot;;&lt;br /&gt;
* replaces the key to left of the &amp;quot;Left Arrow&amp;quot; key with a rocker key labelled &amp;quot;Day&amp;quot; with a &amp;quot;+&amp;quot;and &amp;quot;-&amp;quot; direction;&lt;br /&gt;
* # button (to the right of 0) has a secondary label of HD/Zoom vs. ENTER&lt;br /&gt;
* is a &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.2 or JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt; remote;&lt;br /&gt;
* there are SEVERAL signatures identified (and RDFs created) to date, including:&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;10251025&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;JP 1.2 - labelled JP1&amp;lt;/span&amp;gt;&#039;&#039;&#039;) has about 3.5K of equivalent &amp;quot;EEPROM&amp;quot; memory;&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30003000&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) all of the JP1.3&#039;s have about 4.5K of equivalent &amp;quot;EEPROM&amp;quot; memory;&lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30323032&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;); and &lt;br /&gt;
:* &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30333033&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP 1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) - signature shared with the 1056 OCAP remote.&lt;br /&gt;
&lt;br /&gt;
==Atlas OCAP (1056 and 1056BC)==&lt;br /&gt;
* (has a few more evident external differences):&lt;br /&gt;
* Separate &amp;quot;Menu&amp;quot; and &amp;quot;Settings&amp;quot; keys;&lt;br /&gt;
* &amp;quot;Exit&amp;quot; key moved up ABOVE the arrow key array;&lt;br /&gt;
:* this results in FIVE buttons between the &amp;quot;UP Arrow&amp;quot; and the Device keys rather than just the three on the other 2 remotes;&lt;br /&gt;
* there is an extra &amp;quot;D&amp;quot; key next to the three &amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, and &amp;quot;C&amp;quot; keys;&lt;br /&gt;
* Adds alphabetic characters to the numeric keys (like a phone keypad);&lt;br /&gt;
* has the middle &amp;quot;F&amp;quot; button enlarged, painted white, and labelled &amp;quot;ON DEMAND&amp;quot;, whilst the other &amp;quot;F&amp;quot; keys are shrunken circular buttons;&lt;br /&gt;
* has a silver-colored variant (1056BC);&lt;br /&gt;
* shares signature &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;&#039;&#039;&#039;30333033&#039;&#039;&#039;&amp;lt;/span&amp;gt; (&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;JP1.3&#039;&#039;&#039;&amp;lt;/span&amp;gt;) with one of the 1055s above - a modified rdf is available.&lt;br /&gt;
* has about 4.5K of equivalent &amp;quot;EEPROM&amp;quot; memory.&lt;br /&gt;
&lt;br /&gt;
==ALL of these remotes==&lt;br /&gt;
* may or may not have learning capability.  I expect the 1054 has no learning variant.  At least the 1K EEPROM would suggest that is the case.  Depending upon the cable provider&#039;s requirements with UEIC, the additional circuitry and alternate EEPROM size may be missing.  There is no readily apparent way to tell this without opening up the remote &#039;&#039;&#039;&#039;&#039;(or simply trying to learn, I suppose).&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* may or may not have UHF capability.  There is an &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/app.php/file?file_id=4620 FCC document]&amp;lt;/span&amp;gt; indicating at least one version of the 30323032 URC-1055 (oddly enough it is internally labelled as a URC-2150(?!)) has a UHF transmitter compatible with certain Cable boxes.  This would have no effect on JP1 programming;&lt;br /&gt;
&lt;br /&gt;
* may or may not have backlighting.  Of the Atlases I have seen personally or referred to in these fora, the 1056 (both colors) is the only one to have confirmed backlighting as an option;&lt;br /&gt;
&lt;br /&gt;
* have three keys just below the &amp;quot;Mute&amp;quot;and &amp;quot;Last&amp;quot; keys that will have tailored labels for the cable provider. [size=75]&#039;&#039;Note the difference in the 1056 OCAP remote in this regard.&#039;&#039;[/size]  In UEIC literature, on the 1054 and 1055s, these unlabelled keys are referred to as &amp;quot;TuneIn1&amp;quot;, &amp;quot;TuneIn2&amp;quot;, and &amp;quot;TuneIn3&amp;quot;, and on the 1056, they are labelled &amp;quot;F1&amp;quot;, &amp;quot;On Demand&amp;quot;, and &amp;quot;F2&amp;quot; respectively.  Although they may have different labels in a particular cable provider&#039;s application, these are the names used in the software tools;&lt;br /&gt;
&lt;br /&gt;
* most of these remotes have a silkscreened marking next to the 6-pin connector identifying whether it is JP 1, JP 1.2 (see the comment about the 10251025) or JP 1.3, but some may not.  As only the 1054 is JP1 and the others are JP 1.x, it&#039;s no problem simply connecting the appropriate cable and downloading from the remote to identify what signature it has, and IR should automatically select the correct rdf (unless it&#039;s another new one [[Image:icon_rolleyes.gif]] )&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Icon_rolleyes.gif&amp;diff=3434</id>
		<title>File:Icon rolleyes.gif</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Icon_rolleyes.gif&amp;diff=3434"/>
		<updated>2025-12-01T01:05:31Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Atlas-backlit.jpg&amp;diff=3433</id>
		<title>File:Atlas-backlit.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Atlas-backlit.jpg&amp;diff=3433"/>
		<updated>2025-12-01T00:58:14Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Atlas-std.jpg&amp;diff=3432</id>
		<title>File:Atlas-std.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Atlas-std.jpg&amp;diff=3432"/>
		<updated>2025-12-01T00:58:04Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:AtlasOCAPSilverDVR-PVR2.jpg&amp;diff=3431</id>
		<title>File:AtlasOCAPSilverDVR-PVR2.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:AtlasOCAPSilverDVR-PVR2.jpg&amp;diff=3431"/>
		<updated>2025-12-01T00:57:52Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Atlas-OCAP-1056-1.jpg&amp;diff=3430</id>
		<title>File:Atlas-OCAP-1056-1.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Atlas-OCAP-1056-1.jpg&amp;diff=3430"/>
		<updated>2025-12-01T00:57:36Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:AtlasDVR_PVR2.jpg&amp;diff=3429</id>
		<title>File:AtlasDVR PVR2.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:AtlasDVR_PVR2.jpg&amp;diff=3429"/>
		<updated>2025-12-01T00:57:24Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Atlas5-DeviceSettings.jpg&amp;diff=3428</id>
		<title>File:Atlas5-DeviceSettings.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Atlas5-DeviceSettings.jpg&amp;diff=3428"/>
		<updated>2025-12-01T00:56:10Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Technical_Documents&amp;diff=3427</id>
		<title>Technical Documents</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Technical_Documents&amp;diff=3427"/>
		<updated>2025-11-23T16:24:51Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Schematics==&lt;br /&gt;
&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/15-1925.pdf 15-1925.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/15-1935.pdf 15-1935.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/15-1995.pdf 15-1995.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/15-2117.pdf 15-2117.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/RCU810.pdf RCU810.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/URC-4300B01.pdf URC-4300B01.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/URC-7200-v1.gif URC-7200-v1.gif]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/URC-7200-v2.gif URC-7200-v2.gif]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/URC-9800.pdf URC-9800.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/schematics/URC-9800.pdf URC-9900.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==MCU Chip Manuals==&lt;br /&gt;
===JP1.3 - Samsung S3F8===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Samsung_S3F80JB_Rev11.pdf Samsung S3F80JB]&lt;br /&gt;
&lt;br /&gt;
===JP1.2 - Motorola HCS08===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/MC9S08RG60.pdf MC9S08RG60.pdf] - Motorola HCS08 MCU chip used in the JP1.2 remotes&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/HCS08RMV1.pdf HCS08RMV1.pdf] - Motorola HCS08 MCU chip used in the JP1.2 &amp;quot;Catalyst 48&amp;quot; remotes&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
===JP1.1 - SST===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/SST-65P542R.pdf SST 65P542R] - data sheet&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/SST-instruction-set.pdf SST 65P542R] - instruction set&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
===JP1 - Samsung S3C8===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/S3C8-data-sheet.pdf S3C8-data-sheet.pdf] - S3C8 data sheet - S3C8639/C863A/P863A/C8647/F8647&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/S3C8-instruction-set.pdf S3C8-instruction-set.pdf] - Instruction set for S3C80E5/P80E5/C80E7/P80E7&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===JP1 - Mitsubishi 740===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Mits-740-sum.pdf Mits-740-sum.pdf] - Summary Manual for the 740, a good programming reference.pdf Contains more detailed descriptions of the instructions and their results.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Mits-740.pdf Mits-740.pdf] - Mitsubishi 740 user manual (used in the Producer 8s)&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
===JP1 - Motorola 6805===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/68HC05RC16.pdf 68HC05RC16.pdf] - Datasheet for the 68HC05RC16 chip.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/68HC05RC18.pdf 68HC05RC18.pdf] - Datasheet for the 68HC05RC18 chip.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/MC68HC05C9A.pdf MC68HC05C9A.pdf] - MC68HC05C9A (used in the URC-43000B01 Navigator)&amp;lt;br&amp;gt;&lt;br /&gt;
 	&lt;br /&gt;
===JP1 - Mosaic===&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/31LF041.pdf 31LF041.pdf] - SST 32-lead memory chip used by Mosaic&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Sharp-ARM-block-diagram.pdf Sharp-ARM-block-diagram.pdf] - Sharp LH77790B: Block Diagram (used in the Mosaic)&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Sharp-ARM.pdf Sharp-ARM.pdf] - Sharp LH77790B: General description of the main chip inside the Mosaic/Director remote&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/Sharp-LH77790B.pdf Sharp-LH77790B.pdf] - Sharp LH77790B: data sheet (used in the Mosaic)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EEPROM Chip Manuals==&lt;br /&gt;
&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/24AA16.pdf 24AA16.pdf] - &amp;quot;Microchip&amp;quot; 24AA16 and 24LC16B eeproms&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/AT24C32.pdf AT24C32.pdf] - Sheet for the ATMEL AT24C32 and AT24C64 EEPROM chips&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/chip-manuals/NM24C16-17.pdf NM24C16-17.pdf] - Fairchild Semiconductors - EEPROM spec sheet&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FCC Test Results==&lt;br /&gt;
===15-1935===&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1935/15-1935.pdf 15-1935.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1935/external-pics.pdf external-pics.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===15-1995===&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/15-1995a.pdf 15-1995a.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/15-1995b.pdf 15-1995b.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/RF-puck-bottom.jpg RF-puck-bottom.jpg]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/RF-puck-top.jpg RF-puck-top.jpg]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/description.pdf description.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/graphic-design.pdf graphic-design.pdf]&amp;lt;br&amp;gt; &lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/internal-pictures.pdf internal-pictures.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/letter1.pdf letter1.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/letter2.pdf letter2.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/pictures.pdf pictures.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/schematics.jpg schematics.jpg]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/schematics.pdf schematics.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/test-results.pdf test-results.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/testing-pictures.pdf testing-pictures.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-1995/user-manual.pdf user-manual.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===15-2117===&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-2117a.pdf 15-2117a.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/15-2117b.pdf 15-2117b.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===URC-9800===&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/URC-9800.pdf URC-9800.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/diagram.pdf diagram.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/external-pics.pdf external-pics.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/letter_1.pdf letter_1.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/letter_2.pdf letter_2.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9800/wave-description.pdf wave-description.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===URC-9910===&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9910a.pdf URC-9910a.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/files/FCC/URC-9910b.pdf URC-9910b.pdf]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IRP_Notation&amp;diff=3426</id>
		<title>IRP Notation</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IRP_Notation&amp;diff=3426"/>
		<updated>2025-11-23T16:22:16Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Specification of IRP Notation&#039;&#039;&#039; - &#039;&#039;by [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=12337 Graham Dixon]&#039;&#039; ([https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7926 PDF Version])&lt;br /&gt;
&lt;br /&gt;
The notation currently used for describing IR protocols, generally just referred to as “IRP notation”, was developed by John Fine in a series of postings on a restricted Yahoo forum on 13 March 2003 and a few following days. Partial descriptions have appeared since in various messages on the JP1 website, but I have been unable to find a comprehensive description. I feel it is time for one to appear.&lt;br /&gt;
&lt;br /&gt;
This document attempts to be a full specification in sufficient detail that an automated process to parse and execute a protocol in IRP notation could be written without the fear that some possible construction has been overlooked. The sections on syntax give an informal description followed by a formal specification of the syntax and a description of the semantics of that syntax. A later section of the document gives an execution model written in the context of a conceptual remote control. This structure leads to some inevitable duplication in places, but I think the benefits outweigh the disadvantages.&lt;br /&gt;
&lt;br /&gt;
==General principles of IRP notation==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The function of an IR protocol is to transmit a set of named numerical values from one device to another, normally from a remote control to the piece of equipment that it controls, by flashing an infrared light on and off. The IR Protocol (IRP) notation is a means of describing how this is to be done. The names of the values are commonly “Device code”, “Subdevice code” and “Function code”, but some or even all of these may be absent and others may be present. There may also be values for other purposes, such as&lt;br /&gt;
&lt;br /&gt;
*a calculated “Checksum” to provide a confirmation that the signal has been received correctly, or &lt;br /&gt;
*a “Toggle” that the sender changes from one signal to the next to enable the receiver to distinguish two otherwise identical signals from one longer signal.&lt;br /&gt;
&lt;br /&gt;
The infrared signal consists of a series of flashes of light with gaps in between. In a flash the light is usually not on continuously, but is being pulsed on and off rapidly at a fixed frequency, known as the &#039;&#039;carrier frequency&#039;&#039;. In the gaps, the light is fully off. As an example, a flash lasting 1200 microseconds could consist of 48 on/off cycles at a frequency of 40kHz and could be followed by a gap of 600 microseconds before the next flash. The information is carried in the durations of the flashes and gaps. The frequency itself carries no information. Frequencies vary between protocols, but are fixed for any individual protocol.&lt;br /&gt;
&lt;br /&gt;
In the language of IR protocols a flash and its following gap is generally known as a “burst pair”. The IRP notation describes the encoding process by which the values to be transmitted are converted into a stream of burst pairs with varying durations.&lt;br /&gt;
&lt;br /&gt;
===Basic objects===&lt;br /&gt;
The basic objects of the IRP notation are names and numbers. Names are sequences of capital letters and&lt;br /&gt;
digits but must not start with a digit. Numbers are sequences of digits but must not start with zero unless&lt;br /&gt;
they consist solely of the digit zero. The notation is composed of names and numbers together with other characters from the ASCII character set. White space, e.g. space characters, tabs, line feeds and form&lt;br /&gt;
feeds, are ignored but may be used anywhere for convenience and ease of readability.&lt;br /&gt;
&lt;br /&gt;
Names and numbers both ultimately represent values. Names are used for two purposes. External names are given values by means outside the IRP notation. These values are the data that the protocol is to convey. Internal names correspond to checksums or any other derived values. Internal names are given values by means of definitions that show how they are to be calculated.&lt;br /&gt;
&lt;br /&gt;
For conciseness it is common to use single capital letters for names, with the correspondence&lt;br /&gt;
&lt;br /&gt;
D = Device code&amp;lt;br /&amp;gt;&lt;br /&gt;
S = Subdevice code&amp;lt;br /&amp;gt;&lt;br /&gt;
F = Function code (otherwise called OBC or Original Button Code)&amp;lt;br /&amp;gt;&lt;br /&gt;
C = Checksum&amp;lt;br /&amp;gt;&lt;br /&gt;
T = Toggle.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other single letters are also used as required, but so are abbreviations such as OEM1.&lt;br /&gt;
&lt;br /&gt;
The values represented by names and numbers are integers. Values are usually positive integers or zero, but negative integer values can also occur, such as in the value of a name that represents displacement of a mouse. The value of a number is that number regarded as an integer expressed in decimal notation. Negative integers cannot be represented directly by numbers. A negative integer has to be enclosed in parentheses, e.g. (-12). This is a simple example of an expression. It is not a basic object as it is composed of the number 12 together with the non-alphanumeric symbols &amp;quot;(&amp;quot;, &amp;quot;-&amp;quot; and &amp;quot;)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===The execution process===&lt;br /&gt;
Execution is the process of generating the IR signal from the representation of a protocol in IRP notation. There is a specification of the execution process in section 14 in terms of the action of a conceptual remote control. The resulting signal is described in terms of the durations of the flashes and gaps that compose it, together with the frequency and duty cycle of the carrier wave that is sent during a flash.&lt;br /&gt;
&lt;br /&gt;
The carrier frequency was described in 1.1. The duty cycle is the percentage of the cycle time that the IR light is on. A carrier frequency of 40kHz means that there are 40000 cycles per second, so each lasts 25μs. If each cycle consists of the IR light being on for 9μs and off for 16μs then the duty cycle is 9/25, or 36%. The frequency varies substantially between one protocol and another and is given in the IRP notation. The duty cycle is a matter for the implementation and is not given in the IRP notation. Duty cycles are typically around 33%. A larger value means that the batteries in a remote control will last less long but the range of the signal will be greater.&lt;br /&gt;
&lt;br /&gt;
===Execution concepts===&lt;br /&gt;
There are two intermediate concepts used in the specification of the execution process, a binary form and a bit sequence. These do not have specific IRP notations as they do not occur as such in the IRP representation of protocols. A binary form is essentially the type of representation of an integer value that is used internally in computers, namely the value expressed in binary notation with a fixed bit length. The four-bit binary form for the value 5, for example, is 0101, and for -5 is 1011 (as these two add to 0000 when overflow is ignored).&lt;br /&gt;
&lt;br /&gt;
A binary form has a numerical value. This is its value treated as the binary representation of an integer on the assumption that any leading bits not included in the binary form are 0&#039;s. It may seem pedantic to be this specific, but it is necessary since the value of a finite length binary form that represents a negative integer is not that integer, it is a positive integer which depends on that length. The value of the 4-bit binary form for -5 given above is 11, the value of the 6-bit binary form for -5 is 59.&lt;br /&gt;
&lt;br /&gt;
Binary forms of infinite length can occur conceptually during execution. These are the only binary forms whose value can be negative. They occur implicitly in computers in the Arithmetic Shift Right operation on the binary representation of signed integers. In this operation the vacant space created on the left by the shift is filled not with zero but with a copy of the most significant bit of the unshifed value, as if that bit value continued indefinitely to the left and one bit of it has just been shifted into visibility.&lt;br /&gt;
&lt;br /&gt;
The other intermediate concept in execution is a bit sequence. This is a sequence of bits given in the order in which they are to be processed for transmission. It is therefore a sequence in time, but when written the sequence order is from left to right. A bit is a binary digit, as in the binary notation for integers, so a written bit sequence looks very much like an integer in binary form. They are not the same, however, and the distinction is very important in IRP execution. The bits in a bit sequence have no interpretation in themselves. They are constructed from the values to be sent, and values are reconstructed from them when received, but it is the structure of the protocol and not the rules of binary notation that determines the relationship between values and bit sequences. In particular there is no demarcation between consecutive bit sequences constructed from distinct values.&lt;br /&gt;
&lt;br /&gt;
During the execution process, values are translated into binary forms, binary forms into bit sequences and bit sequences into the sequences of flash and gap durations that describe the signal, so in outline the steps of the execution process are&lt;br /&gt;
&lt;br /&gt;
values --&amp;gt; binary forms --&amp;gt; bit sequences --&amp;gt; duration sequences&lt;br /&gt;
&lt;br /&gt;
===Translation objects===&lt;br /&gt;
The rule for each of these translation steps in the execution process is specified by a particular type of object in IRP notation. The translation of values to binary forms is described by a bitfield, that of binary forms to bit sequences by a sequencing rule and that of bit sequences to duration sequences by a bitspec.&lt;br /&gt;
&lt;br /&gt;
These object differ in their scope. The scope of a bitfield is an individual value. The scope of a sequencing rule is the entire protocol. The scope of a bitspec is in between these two extremes. It covers everything up to the point at which another bitspec is given that changes the rule.&lt;br /&gt;
&lt;br /&gt;
Not all durations in the signal come from values in this way. There are also flashes and gaps in the signal that are for control purposes, such as to distinguish one protocol from another. These do not depend on the data. They are described by specific notations for a flash duration and a gap duration.&lt;br /&gt;
&lt;br /&gt;
There remains one other type of translation object. This is a gap of variable duration that is used to make the total extent in time of the signal, or some major part of the signal, up to a constant length that is independent of the data being sent. It is of variable duration since the lengths of the individual flashes and gaps do depend on the data. The notation for such a variable gap is an extent. The typical use of extents is as the lead-out gap at the end of the signal. Many buttons on a remote control repeat the signal throughout the time that the button is held down. Using an extent as a lead-out ensures that the frequency of repeats does not depend on the data being sent. In the translation phase the data is known, so that an extent can be translated into a specific gap duration&lt;br /&gt;
&lt;br /&gt;
===Overall structure===&lt;br /&gt;
The complete description of a protocol in IRP notation is composed of three or four sections:&lt;br /&gt;
*A GeneralSpec that specifies the carrier frequency, the sequencing rule and a time unit that can be used in durations and extents;&lt;br /&gt;
*A Bitspec that provides the default rule for the translation of bit sequences to duration sequences.&lt;br /&gt;
*An IRStream that gives the sequence of data to be translated and transmitted.&lt;br /&gt;
*If required, Definitions that give the expressions required to calculate the values of internal names.&lt;br /&gt;
&lt;br /&gt;
These are all described in detail in the following sections. The IRstream section can contain further bitspecs and IRstreams but there is only one GeneralSpec and at most one Definitions section. The Bitspec section provides only a default rule as bitspecs within the IRstream section may change the rule for certain parts of the data.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
Each descriptive part of the specification will be accompanied by a formal syntax given in EBNF (Extended Backus-Naur Form) notation and by a precise description of the semantics. An execution model that incorporates these semantics is given in section 14.&lt;br /&gt;
&lt;br /&gt;
There are various extensions of BNF notation in use. This document uses the version standardized by ISO in ISO/IEC 14977:1996, which is freely available on the ISO website.&lt;br /&gt;
&lt;br /&gt;
The characters used in the IRP notation are all characters of the International Reference Version of ISO/IEC 646:1991, commonly referred to as ASCII. Certain characters have more than one usage in the IRP notation, distinguished from one another by context. In particular, the LESS-THAN SIGN and GREATER-THAN SIGN also serve as left and right diamond brackets respectively and the HYPHENMINUS is used both as a minus sign and as a symbol with a meaning specific to IRP notation.&lt;br /&gt;
&lt;br /&gt;
The formal syntax of the overall structure is:&lt;br /&gt;
&#039;&#039;&#039;protocol = generalspec, bitspec, irstream, [definitions];&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In EBNF notation, square brackets denote an optional item. There are no semantics at this level.&lt;br /&gt;
&lt;br /&gt;
==The GeneralSpec section==&lt;br /&gt;
===Description===&lt;br /&gt;
The GeneralSpec section specifies the carrier frequency and certain data that apply throughout the translation process. It is a list of up to three items, separated by commas and enclosed in curly brackets. Three types of item can occur in the list. Each type is optional and there can be at most one item of each type. They are:&lt;br /&gt;
*A frequency item, consisting of a number followed by the letter &amp;quot;k&amp;quot;. It gives the carrier frequency in kilohertz. The default is a frequency of &amp;quot;0k&amp;quot;, which signifies a baseband signal in which the light stays on continuously during a flash. Although optional, a frequency item is normally given since the default value is uncommon and so is best specified explicitly when it applies.&lt;br /&gt;
*A unit item, consisting of a number followed optionally by either of the letters &amp;quot;u&amp;quot; or &amp;quot;p&amp;quot;. It determines a unit of time that can be used in durations and extents.&lt;br /&gt;
**No suffix, or a suffix &amp;quot;u&amp;quot; indicates that the unit is that number of microseconds.&lt;br /&gt;
**A suffix &amp;quot;p&amp;quot; indicates that the unit is the time taken for that number of pulses of the carrier frequency, so the unit in microseconds is the given value multiplied by (1000/f), where f is the number preceding the &amp;quot;k&amp;quot; in the frequency item.&lt;br /&gt;
**If there is no unit item, it defaults to &amp;quot;1u&amp;quot;, i.e. one microsecond.&lt;br /&gt;
*An order item, which gives the sequencing rule that applies globally for the conversion of binary forms to bit sequences. If present it takes one of the values &amp;quot;lsb&amp;quot; or &amp;quot;msb&amp;quot;. If it is &amp;quot;lsb&amp;quot; then the time ordering of the bits in the bit sequence is that the sequence starts with the least significant bit (&amp;quot;lsb&amp;quot;). If it is &amp;quot;msb&amp;quot; then the ordering is to start with the most significant bit. The default is &amp;quot;lsb&amp;quot;. In contrast to the situation with the frequency item, the default is the most common rule and it is not usually specified explicitly.&lt;br /&gt;
&lt;br /&gt;
The number in a frequency item can include a decimal point. This is the only situation in IRP notation in which numbers can be other than integers.&lt;br /&gt;
&lt;br /&gt;
These items can be given in any order. Examples of possible GeneralSpecs are:&lt;br /&gt;
&lt;br /&gt;
{ }, {38.4k, 564}, {msb, 889u}, {10p, msb, 40k}&lt;br /&gt;
&lt;br /&gt;
In the first of these, all items take their default value, so the signal is baseband, the sequencing rule is to convert binary forms to bit sequences in lsb order and the time unit is one microsecond. In the last of these, the carrier frequency is 40 kilohertz, binary forms are converted in msb order and the time unit is 10*(1000/40) = 250 microseconds.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
The complication in giving a formal syntax for the GeneralSpec section comes from the order of the item types being arbitrary. This is dealt with by allowing each item to be of any type but then imposing a restriction that no two items can be of the same type, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;generalspec = &amp;quot;{&amp;quot;, generalspec list, &amp;quot;}&amp;quot;;&lt;br /&gt;
generalspec list = | (generalspec item, 2*[&amp;quot;,&amp;quot;, generalspec item])&lt;br /&gt;
- generalspec list with repeats;&lt;br /&gt;
generalspec item = frequency item | unit item | order item;&lt;br /&gt;
frequency item = number with decimals, &amp;quot;k&amp;quot;;&lt;br /&gt;
unit item = number, [&amp;quot;u&amp;quot; | &amp;quot;p&amp;quot;];&lt;br /&gt;
order item = &amp;quot;lsb&amp;quot; | &amp;quot;msb&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
generalspec list with repeats =&lt;br /&gt;
{generalspec item, &amp;quot;,&amp;quot;}, frequency item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
frequency item, {&amp;quot;,&amp;quot;, generalspec item}&lt;br /&gt;
| {generalspec item, &amp;quot;,&amp;quot;}, unit item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
unit item, {&amp;quot;,&amp;quot;, generalspec item}&lt;br /&gt;
| {generalspec item, &amp;quot;,&amp;quot;}, order item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
order item, {&amp;quot;,&amp;quot;, generalspec item};&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vertical bars separate alternatives. The vertical bar at the start of generalspec list is preceded by an empty alternative, signifying that a generalspec list can be empty. The other alternative is one generalspec item followed by two more optional ones each preceded by a comma separator, provided that the list so constructed is not also a generalspec list with repeats. This consists of all lists of items that include two of the same type, specified separately for each possible repeated type. Curly brackets in EBNF notation denote an arbitrary number of repetitions, including zero.&lt;br /&gt;
&lt;br /&gt;
The undefined identifier number is the basic object described in 1.2. Its formal definition is given in 13.2 The identifier number with decimals means the same except that a decimal point is allowed.&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The real number in a frequency item is the carrier frequency in kilohertz. A zero frequency means that the signal is baseband, i.e. during a flash the IR light is on continuously. This is the default when this item is absent.&lt;br /&gt;
&lt;br /&gt;
A unit item specifies a length of time that can be used as a time unit in durations and extents. If it has no suffix or the suffix &amp;quot;u&amp;quot; then number is the length of time in microseconds. If it has suffix &amp;quot;p&amp;quot; then the length of time in microseconds is number multiplied by (1000/f) where f is the real number preceding the &amp;quot;k&amp;quot; in the frequency item. The result of the multiplication is rounded to the nearest integer. If the unit item is absent then it specifies a time unit of one microsecond.&lt;br /&gt;
&lt;br /&gt;
The order item specifies the global sequencing rule. If it is absent or has the value &amp;quot;lsb&amp;quot; then binary forms are converted to bit sequences by starting with the least significant bit. If it has value &amp;quot;msb&amp;quot; then they are converted starting with the most significant bit.&lt;br /&gt;
&lt;br /&gt;
==Durations==&lt;br /&gt;
===Description===&lt;br /&gt;
Durations specify a length of time in the sending of the IR signal. They describe the modulation of the signal carrier and have a meaning only as part of a sequence. There are two types of duration, a flash duration and a gap duration. A flash duration is a length of time for which the signal carrier is &amp;quot;on&amp;quot;. A gap duration is a length of time for which it is &amp;quot;off&amp;quot;. These are the only two states of the carrier during a signal; it is either fully on or fully off.&lt;br /&gt;
&lt;br /&gt;
The notation for a flash duration is simply the length of time, given in terms of a time unit determined by&lt;br /&gt;
a suffix to the numerical value as follows:&lt;br /&gt;
*&amp;quot;m&amp;quot; indicates that the duration is in milliseconds;&lt;br /&gt;
*&amp;quot;u&amp;quot; indicates that the duration is in microseconds;&lt;br /&gt;
*&amp;quot;p&amp;quot; indicates that the duration is in pulses of the carrier frequency, as described in 2.1 above;&lt;br /&gt;
*no suffix indicates that the duration is in the time unit determined by the unit item of the GeneralSpec section.&lt;br /&gt;
&lt;br /&gt;
The notation for a gap duration is the same but prefixed by &amp;quot;-&amp;quot;. If there are two consecutive flash durations or gap durations in a sequence then the effect is the same as a single one for the total of the two times. There is nothing in the transmitted signal to indicate where one ends and the next starts.&lt;br /&gt;
&lt;br /&gt;
Suppose that the GeneralSpec is {40k, 200}. Then if A = 150, the very artificial sequence 15p,-1m,3,Au,-20m means:&lt;br /&gt;
*a flash of 15*(1000/40) = 375 microseconds, followed by&lt;br /&gt;
*a gap of 1 millisecond = 1000 microseconds, followed by&lt;br /&gt;
*a flash of 3*200 + 150 = 750 microseconds, followed by&lt;br /&gt;
*a gap of 20 milliseconds = 20000 microseconds.&lt;br /&gt;
&lt;br /&gt;
This illustrates that units can be mixed, that names can be used and can have suffixes and that flashes and gaps do not have to alternate.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;duration = flash duration | gap duration;&lt;br /&gt;
flash duration = name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&lt;br /&gt;
gap duration = &amp;quot;-&amp;quot;, name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&lt;br /&gt;
name or number = name | number;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A flash duration is a length of time in an IR signal for which the carrier is in the ON state. A gap duration is a length of time for which it is in the OFF state.&lt;br /&gt;
&lt;br /&gt;
The suffix determines how the value of the name or number is converted into a length of time in microseconds, as follows:&lt;br /&gt;
*For suffix &amp;quot;u&amp;quot; the number is already the time in microseconds.&lt;br /&gt;
*For suffix &amp;quot;m&amp;quot;, multiply by 1000.&lt;br /&gt;
*For suffix &amp;quot;p&amp;quot;, multiply by (1000/f) where f is the real number preceding the &amp;quot;k&amp;quot; in the frequency item of the GeneralSpec.&lt;br /&gt;
*If there is no suffix, multiply by the length in microseconds of the time unit specified by the unit item of the GeneralSpec.&lt;br /&gt;
&lt;br /&gt;
==Extents==&lt;br /&gt;
===Description===&lt;br /&gt;
An extent is a gap duration whose length in time cannot be given explicitly in the protocol. An extent has a scope which consists of a consecutive range of items that immediately precede the extent in the order of transmission in the signal. The role of an extent is to ensure that the time taken for this range of items to be transmitted, plus the following gap (corresponding to the extent), has a constant value even though the time taken by the individual items may vary according to the data being transmitted. It is this constant value that is given in the extent. The precise scope of an extent has to be defined in the context in which it is used.&lt;br /&gt;
&lt;br /&gt;
The notation for an extent is as that for a gap duration, except that the prefix is &amp;quot;^&amp;quot; instead of &amp;quot;-&amp;quot;. When all the items in its scope have been translated into durations, the extent can be translated into a gap duration by subtracting the total length in time of the durations in its scope from the time given in the extent. An artificial example is&lt;br /&gt;
&lt;br /&gt;
1,-4,D,^25&lt;br /&gt;
&lt;br /&gt;
as an extent with its preceding scope. This translates to 1,-4,10,-10 if D = 10 but to 1,-4,5,-15 if D = 5, the final gap making the duration as a whole up to 25 units regardless of the value of D.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;extent = &amp;quot;^&amp;quot;, name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The name or number together with the suffix, if any, determine a length of time as in the semantics of a duration described in 3.3.&lt;br /&gt;
&lt;br /&gt;
An extent has a scope that has to be defined in any context in which an extent can be used. During execution, all the items in the scope are converted into durations. The extent then translates into a gap duration by subtracting the total length in time of these durations from the length of time determined by the extent.&lt;br /&gt;
&lt;br /&gt;
==Bitfields==&lt;br /&gt;
===Structure and interpretation===&lt;br /&gt;
A bitfield is a translation object that converts a specific value to a binary form. Note, however, that the binary form may be constructed from only a portion of the bits in the binary expression of the value and that even if it corresponds to all these bits then the value of the binary form may not be the same as the value from which it was constructed.&lt;br /&gt;
&lt;br /&gt;
A simple example of a bitfield is D:6. The binary form consists of the least significant six bits of D, with the binary representation of D considered as padded on the left with potentially an infinite number of zeroes. So if D = 244, its value in binary notation is ...00011110100 and the least significant six bits give the binary form 110100. If D = 5, its value in binary notation is ...00000101 and the least significant six bits give the binary form 000101.&lt;br /&gt;
&lt;br /&gt;
A bitfield such as D:6:2 is similar, but leaves out the two least significant bits and selects the next six. For D = 244 and D = 5 this gives respectively the binary forms 111101 and 000001. The bitfield D:6 is equivalent to D:6:0.&lt;br /&gt;
&lt;br /&gt;
The value concerned can be negative. In this case no padding is required. The complete binary representation of a negative integer (in the usual 1&#039;s complement form) extends on the left to infinity with all tbe bits beyond a certain point being 1. So -5 is ...11111011 where the dots denote an infinite sequence of ones (since when this is added to ...000000101 the digits of the sum are all zero). If D = -5, the binary form given by D:6 is 111011. To write this using an explicit value, we must use brackets, thus (-5):6 to show that the minus sign is part of the value and not a prefix of the IRP notation. This is an example of the use of an expression in a bitfield. Expressions are described in more detail in 9.1 below.&lt;br /&gt;
&lt;br /&gt;
There are three further refinements to the bitfield notation. The first element of the bitfield can have a prefix &amp;quot;~&amp;quot;. This complements each bit in the binary form, i.e. changes a 1 to a 0 and vice versa. The second element can be absent or, if present, can have a prefix &amp;quot;-&amp;quot;. If it is absent then the bit length of the binary form is conceptually infinite, as described above. In this case the third element must be present to prevent the bitfield ending with a colon and so giving rise to ambiguous syntax. A third element can always be added without changing the interpretation, so although D: is not valid, D::0 is equivalent and is valid. Prefixing the second element with &amp;quot;-&amp;quot; reverses the order of the bits in the binary form, so the most significant bit becomes the least significant bit, etc. So with D = 244, ~D:6:2 gives the binary form 000010, D:-6:2 gives 101111 and ~D:-6:2 gives 010000.&lt;br /&gt;
&lt;br /&gt;
It was explained in 1.4 that binary forms have values, although bit sequences do not. With D = 244 the values of these three binary forms are ~D:6:2 = 2, D:-6:2 = 47 and ~D:-6:2 = 16.&lt;br /&gt;
&lt;br /&gt;
There are still more subtleties to be aware of. Each element can be any type of primary item, a primary item being a name, a number or an expression, provided that the second and third elements evaluate to non-negative integers. Expressions can be recognised as they are enclosed in parentheses but they can themselves contain bitfields. When a bitfield occurs in an expression, its value is the value of the binary form to which it translates, not the binary form itself. So F:D is a valid bitfield whose binary form consists of the D least significant bits of the value of F. It is not valid to take D = -4 and expect this to be the same as F:-4, since the prefix &amp;quot;-&amp;quot; in F:-4 is part of the IRP syntax, not of the value of the second element. But F:-D with D = 4 is valid, and does mean F:-4. If A = 7 then F:A:2 means F:7:2 but F:(A:2) means F:3, since A = 111 in binary notation so A:2 is the binary form 11 and the expression (A:2) evaluates to 3.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;bitfield = [&amp;quot;~&amp;quot;], primary item, &amp;quot;:&amp;quot;, ([&amp;quot;-&amp;quot;], primary item, [&amp;quot;:&amp;quot;, primary&lt;br /&gt;
item] | &amp;quot;:&amp;quot;, primary item);&lt;br /&gt;
primary item = name | number | expression;&lt;br /&gt;
(* The different types of primary item can be distinguished by their first&lt;br /&gt;
character as follows: digit =&amp;gt; unsigned integer, capital letter =&amp;gt; name,&lt;br /&gt;
&amp;quot;(&amp;quot; =&amp;gt; expression. *)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
Each type of primary item evaluates to an integer value. A bitfield evaluates to a binary form, an integer value expressed in binary notation with a fixed finite or infinite bit length in which negative integers are expressed in 1&#039;s complement notation. The value of the bitfield a:b:c, where the integer a and nonnegative integers b and c are the values of the primary items, is determined as follows:&lt;br /&gt;
*express a in its binary representation, conceptually padded on the left with an infinite number of 0&#039;s or 1&#039;s as appropriate, negative values being expressed in the usual 1&#039;s complement form;&lt;br /&gt;
*delete the c least significant bits;&lt;br /&gt;
*if b is present take the next b least significant bits and discard the rest, otherwise b is absent and nothing is discarded, the binary form is the conceptually infinite form that remains.&lt;br /&gt;
&lt;br /&gt;
The value of a:b is the same as a:b:0. In the general case where either or both of the permitted prefixes are present then apply the following further steps:&lt;br /&gt;
*if the first item in the bitfield has the prefix &amp;quot;~&amp;quot; then complement each bit in the sequence, i.e. replace 1&#039;s by 0&#039;s and 0&#039;s by 1&#039;s;&lt;br /&gt;
*if the second item in the bitfield has the prefix &amp;quot;-&amp;quot; then reverse the order of the sequence.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;-&amp;quot; prefix is not permitted unless b is present. If either b or c is negative then the bitfield is invalid. In the execution process, a bitfield is a translation object that translates the value a to a binary form.&lt;br /&gt;
&lt;br /&gt;
==IRstreams==&lt;br /&gt;
===Description===&lt;br /&gt;
As seen in 1.6, the detail of an IR protocol is carried in an IRstream but that is not the only role of&lt;br /&gt;
IRstreams, as will be seen in section 7. An IRstream consists of a list of items that represents an order for&lt;br /&gt;
transmission, together with an optional marker that describes whether and how those items are to be&lt;br /&gt;
repeated in the transmission. Each item ultimately translates to a duration or a sequence of durations.&lt;br /&gt;
IRstreams can be nested but the outer one, the IRstream section described in 1.6, translates to the&lt;br /&gt;
sequence of durations that describes the entire signal.&lt;br /&gt;
&lt;br /&gt;
Each item in the list is one of the following:&lt;br /&gt;
*Duration&lt;br /&gt;
*Extent&lt;br /&gt;
*Assignment&lt;br /&gt;
*Variation&lt;br /&gt;
*Bitfield&lt;br /&gt;
*IRstream&lt;br /&gt;
*Bitspec followed by IRstream&lt;br /&gt;
&lt;br /&gt;
The notation for an IRstream is that the items are separated by commas, the list is enclosed in parentheses and optionally followed by a repeat marker. Repeat markers are the subject of section 8 below.&lt;br /&gt;
&lt;br /&gt;
Items that are durations need no translation. Extents are translated into durations in accordance with&lt;br /&gt;
section 4, the scope of an extent being all items from the start of the IRstream to the extent itself.&lt;br /&gt;
Assignments do not themselves translate to durations, instead they change the values bound to names in&lt;br /&gt;
the global environment. Variations are alternative sections of the IRstream in which the active alternative&lt;br /&gt;
may vary as the IRstream is repeated in accordance with its repeat marker. Durations and extents have&lt;br /&gt;
been described in previous sections, assignments and variations are described in sections 11 and 12 The&lt;br /&gt;
scope rule for an extent is handled automatically by the execution model of section 14.&lt;br /&gt;
&lt;br /&gt;
Bitspecs also have a specific scope. Every bitspec is always followed by an IRstream, but not necessarily conversely. As the list of item types shows, an IRstream can contain other IRstreams that do not have preceding bitspecs. The scope of a bitspec is the whole of the IRstream that follows it but excluding the scopes of any bitspecs that this IRstream contains.&lt;br /&gt;
&lt;br /&gt;
A bitfield is processed as follows. Its primary items (names, numbers and expressions) are evaluated in the context of the global environment. The bitfield is then evaluated as a binary form as described in 5.3. The sequencing rule determined by the GeneralSpec in accordance with 2.3 is then applied to translate the binary form into a bit sequence. Adjacent bit sequences are concatenated and then processed further in accordance with the currently active bitspec, i.e. the one in whose scope they lie. This is described in section 7 below.&lt;br /&gt;
&lt;br /&gt;
During execution the processing of an IRstream is performed in left to right order, i.e. in the order of its&lt;br /&gt;
items for transmission. This is significant as assignments may change the values bound to names in the&lt;br /&gt;
global environment, so that subsequent items are processed in the context of the changed environment.&lt;br /&gt;
When this sequential processing reaches an item that is itself an IRstream, processing of the current&lt;br /&gt;
IRstream is suspended and that of the new one commenced. When the processing of this new IRstream is&lt;br /&gt;
completed, that of the previous one is resumed. In the execution model of section 14, this is handled&lt;br /&gt;
through a last in, first out (LIFO) IRstream stack. When the sequential processing reaches an item that is&lt;br /&gt;
a bitspec, this becomes the currently active bitspec. When processing of the IRstream that follows this&lt;br /&gt;
bitspec is completed, the bitspec that was formerly active is restored as the current one. In the execution&lt;br /&gt;
model of section 14, this is handled through a LIFO bitstream stack.&lt;br /&gt;
&lt;br /&gt;
As a simple example of an IRstream, consider the following one that occurs in the Dish Network:&lt;br /&gt;
&amp;lt;pre&amp;gt;(F:-6,U:5,D:5,1,-15).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this protocol the sequencing rule is lsb. Suppose F=13, U=3, D = 25. In binary notation these values are F = 1101, U = 11, D = 11001. Pad these to the lengths specified in the bitfields to give F = 001101, U = 00011, D = 11001. Take account of the &amp;quot;-&amp;quot; prefix in F:-6 to give the binary forms&lt;br /&gt;
&amp;lt;pre&amp;gt;F:-6 = 101100, U:5 = 00011, D:5 = 11001.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the sequencing rule is lsb, these translate separately to the bit sequences&lt;br /&gt;
&lt;br /&gt;
0 0 1 1 0 1, 1 1 0 0 0, 1 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
where the bits have been spaced out to distinguish them from binary forms. As these are adjacent in the IRstream they are concatenated into the single bit sequence&lt;br /&gt;
&lt;br /&gt;
0 0 1 1 0 1 1 1 0 0 0 1 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
for further processing by the active bitspec.&lt;br /&gt;
&lt;br /&gt;
There is now no demarcation in the bit sequence to show where the bits from the different external values&lt;br /&gt;
start and end. This comes into its own if the bitspec translates bits in groups rather than individually, a&lt;br /&gt;
possibility that will be seen in section 7. In the Dish Network protocol they actually are translated&lt;br /&gt;
individually, but suppose for the sake of this example that they are translated in groups of four, as actually happens in the XMP protocol. This grouping would be&lt;br /&gt;
&lt;br /&gt;
0 0 1 1, 0 1 1 1, 0 0 0 1, 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
which is very different from that resulting from the binary forms. The bits comprising the second of these groups are actually the two least significant bits of F in msb order, followed by the two least significant bits of U in lsb order, but this group would be processed by the bitspec as a single entity. In a similar way both U and D contribute to the third group. As a result there would be no part of the IR signal that could be said to be the encoding of any of F, U or D. These separate values can be recovered from the signal only in the context of the protocol specification that was used to translate and encode them.&lt;br /&gt;
&lt;br /&gt;
The concatenation of bit sequences and the subsequent re-grouping for processing by a bitspec is handled in the execution model by means of a first in, first out (FIFO) bit buffer. Each bitspec has its own such buffer for the bits it is to process.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;irstream = &amp;quot;(&amp;quot;, bare irstream, &amp;quot;)&amp;quot;, [repeat marker];&lt;br /&gt;
bare irstream = | irstream item, [&amp;quot;,&amp;quot;, bare irstream -];&lt;br /&gt;
(* This allows a bare irstream to be empty but the bare irstream in the&lt;br /&gt;
second alternative cannot be empty. This is the significance of the&lt;br /&gt;
minus sign, which is the EBNF exception symbol. What is excluded by&lt;br /&gt;
the exception is what follows it, which in this case is empty. *)&lt;br /&gt;
irstream item = duration | extent | assignment | variation | bitfield |&lt;br /&gt;
irstream | bitspec, irstream;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The items of a bare irstream are processed sequentially from left to right, each in accordance with its own semantics. In the case of a bitfield there is a further processing stage. Processing of a bitfield yields a binary form. This is then translated to a bit sequence in accordance with the global sequencing rule.&lt;br /&gt;
&lt;br /&gt;
The permitted item types include extent and bitspec, each of which requires its scope to be specified in any context in which it can be used. Within an irstream the scope of a bitspec is every item in the following irstream except for items of the form &amp;quot;bitspec, irstream&amp;quot;, where the scope includes the bitspec but not the irstream. The scope of an extent is every item that precedes it in that irstream.&lt;br /&gt;
&lt;br /&gt;
==Bitspecs==&lt;br /&gt;
===Description===&lt;br /&gt;
A bitspec specifies a rule for translating a bit sequence into a bare IRstream, i.e. an IRstream without its enclosing parentheses and any following repeat marker. In effect, this bare IRstream simply replaces the bit sequence to create a new IRstream. The details of this process are given below.&lt;br /&gt;
&lt;br /&gt;
The action of a bitspec is not restricted to a specific bit sequence. Instead it is a general rule that has a well-defined scope specified in 6.1 and which applies to any bit sequence in its scope.&lt;br /&gt;
&lt;br /&gt;
The rule usually translates each bit separately but it may translate bit pairs or bit quadruples, or indeed bits taken in groups of any size but only groups of 1, 2 or 4 bits have yet been seen in real protocols. The rule is defined simply by giving the bare IRstream corresponding to every possible combination of 0&#039;s and 1&#039;s in a group of the appropriate size.&lt;br /&gt;
&lt;br /&gt;
For a bitspec that translates bits in groups of n, the number of possible combinations is 2 to the power n.&lt;br /&gt;
The corresponding sequences of bare IRstreams are listed in the order of the bit sequences given by the&lt;br /&gt;
bitfields&lt;br /&gt;
&lt;br /&gt;
0:n, 1:n, 2:n, 3:n, ... (n-1):n.&lt;br /&gt;
&lt;br /&gt;
These bitfields are translated to bit sequences as if they were themselves IRstream items, so this is a twostep&lt;br /&gt;
process. First they are translated to n-bit binary forms and then the global sequencing rule is applied&lt;br /&gt;
to further translate them to bit sequences. If the sequencing rule is &amp;quot;msb&amp;quot; and n = 3 then this order is&lt;br /&gt;
&lt;br /&gt;
0 0 0, 0 0 1, 0 1 0, 0 1 1, 1 0 0, 1 0 1, 1 1 0, 1 1 1&lt;br /&gt;
&lt;br /&gt;
but if the sequencing rule is &amp;quot;lsb&amp;quot; then the order is&lt;br /&gt;
&lt;br /&gt;
0 0 0, 1 0 0, 0 1 0, 1 1 0, 0 0 1, 1 0 1, 0 1 1, 1 1 1.&lt;br /&gt;
&lt;br /&gt;
The notation for a bitspec is a list of the bare IRstreams separated by vertical bars &amp;quot;|&amp;quot; with the whole enclosed in diamond brackets (i.e. less-than and greater-than signs). The number of bare IRstreams does not have to be a power of two, but if it is not then it is treated as if this number were the next greater nonzero power of two and with the bare IRstreams for the later bit sequences being empty. It is not a syntax error as a bare irstream is permitted to be empty. The qualification &amp;quot;non-zero&amp;quot; permits, say, &amp;lt;1,-2&amp;gt; to be a valid bitspec for which n = 1, the bit 0 is mapped to the bare IRstream 1,-2 and the bit 1 is mapped to the empty bare IRstream.&lt;br /&gt;
&lt;br /&gt;
Some examples of bitspecs from real protocols are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;1,-1,1,-8|1,-10&amp;gt;, &amp;lt;-1,1|1,-1&amp;gt;, &amp;lt;1,-3.3m|1,-4.7m&amp;gt;, &amp;lt;-4,2|-3,1,-1,1|-2,1,-2,1|-1,1,-3,1&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These illustrate the form that is by far the most common, in that the bare IRstreams are simply sequences of durations. Bitfields also occur in bitspecs within IRstreams for some real protocols. The IRP notation, however, permits any of the types of item listed in 6.1 as permitted in IRstreams and the execution model of section 14 can handle any such construction.&lt;br /&gt;
&lt;br /&gt;
The action of a bitspec in the execution process is as follows. Recall that adjacent bit sequences are concatenated, as described in 6.1, so this description applies to the resulting concatenated sequence. The bits of the bit sequence to be processed are taken in groups of the appropriate size starting from the beginning of the sequence. Each group is then translated into the corresponding bare IRstream. This will result in a series of consecutive bare IRstreams that are themselves concatenated into a single, larger, one. The overall effect is therefore to translate a bit sequence into a single bare IRstream. The execution process then processes this bare IRstream before returning to process the subsequent items of the original IRstream.&lt;br /&gt;
&lt;br /&gt;
In the general form of a bitspec the bare IRstream that it constructs may itself contain bitfields (which occurs in a number of real protocols) or even IRstreams possibly proceded by other bitspecs (which have not yet been seen in real protocols). In either case the whole process for the translation of bitfields to bare irstreams may be called recursively. This raises the question of which bitspec is used for such recursive processing. This is answered by the scope rule for bitspecs. As described in 6.1, when a bitspec is encountered within an IRstream, the scope of the new bitspec is the IRstream that follows it. The bare IRstreams within that new bitspec fall within the scope of the &amp;quot;old&amp;quot; bitspec that applies to the containing IRstream, and therefore it is this &amp;quot;old&amp;quot; bitspec that applies in recursive processing. The execution model of section 14 handles this through the bitspec stack that was mentioned in 6.1.&lt;br /&gt;
===Execution example 1: Zenith protocol===&lt;br /&gt;
As an introduction to the execution model of section 14, this subsection examines a simple but non-trivial example, the Zenith protocol, to see how the semantics described so far can be modelled in terms of stacks and buffers. The protocol is&lt;br /&gt;
&lt;br /&gt;
{40k,520}&amp;lt;1,-1,1,-8|1,-10&amp;gt;( S:1,&amp;lt;1:2|2:2&amp;gt;(F:D),-90m )+&lt;br /&gt;
&lt;br /&gt;
where the plus sign is a repeat marker that will be explained in 8.1.&lt;br /&gt;
&lt;br /&gt;
Suppose that D = 4, S = 1 and F = 43. The first item to be processed is the outer bitspec. This gets pushed on the bitspec stack and becomes the currently active one. The next one is the outer IRstream, which first gets pushed on the irstream stack and then its contents is processed.&lt;br /&gt;
&lt;br /&gt;
This processing begins with the bitfield S:1, which now is 1:1 and which translates to the trivial bit sequence 1. The currently active bitspec translates this to the bare IRstream&lt;br /&gt;
&lt;br /&gt;
1,-10&lt;br /&gt;
&lt;br /&gt;
which in the execution model is then transmitted as the start of the signal.&lt;br /&gt;
&lt;br /&gt;
The execution process then meets the inner bitspec, which is pushed on the bitspec stack and becomes the currently active one. The following IRstream is pushed on the IRstream stack and flagged as having a preceding bitspec.&lt;br /&gt;
&lt;br /&gt;
The contents of this inner IRstream is now processed. It has one item, the bitfield F:D. The binary representation of F is 101011, so as a binary form F:D = 1011. The sequencing rule is lsb, so the bit sequence is 1 1 0 1. This is pushed into the buffer for the active (inner) bitspec, but as there are no more items in the IRstream then the next step is to process this buffer with the bitspec to which is belongs.&lt;br /&gt;
&lt;br /&gt;
The first stage in processing the buffer is to make the previous bitspec (the outer one) be the active one by decrementing the stack pointer. The bits are pulled and processed (FIFO) one at a time, the order being 1 1 0 1. The first bit gets mapped to the bitfield 2:2, translated to the binary form 10 and then, since the sequencing rule is lsb, to the bit sequence 0 1. This is pushed into the buffer of the currently active bitspec, which is now the outer one. Note that two buffers are now in current use.&lt;br /&gt;
&lt;br /&gt;
The remaining three bits of the buffer being processed are pulled, mapped and processed similarly; in general this continues until either the buffer is empty or processing of the bare IRstream resulting from the mapping meets something other than a bitfield. This is the way the concatenation of bit sequences is handled. When either of these happen then the buffer is processed. In the present case this continues until the buffer being processed is empty and the buffer of the current (outer) bitspec contains&lt;br /&gt;
&lt;br /&gt;
0 1 0 1 1 0 0 1.&lt;br /&gt;
&lt;br /&gt;
This buffer is now processed by its bitspec. The bitspec stack pointer is again decremented, which means that there is now no current bitspec. So if a bitfield was encountered it would be an error, but that does not happen here as each of these bits is mapped to a sequence of durations by the outer bitspec according to the mapping.&lt;br /&gt;
&lt;br /&gt;
0 -&amp;gt; 1,-1,1,-8 1 -&amp;gt; 1,-10.&lt;br /&gt;
&lt;br /&gt;
In the execution model these are transmitted as they are encountered. When this has been done and this buffer is empty, the previous active bitspec, the outer one, is again made current by incrementing the bitspec stack pointer. Its buffer is now empty so the bitspec stack pointer is incremented once again to make the inner bitspec be active.&lt;br /&gt;
&lt;br /&gt;
Processing of the inner IRstream now resumes, with the item after F:D. But the end of this IRstream has been reached, so its processing has been completed, together with that of its preceding bitspec since its scope was just this IRstream. As the IRstream was flagged has having a preceding bitspec, that bitspec is pulled from the stack, once again making the outer bitspec be active. The completed (inner) IRstream is also pulled from its stack and processing resumes of the outer IRstream.&lt;br /&gt;
&lt;br /&gt;
There is only one item left, the lead-out gap -90m. Execution waits for this time and then continues with the next execution of the (outer) IRstream in accordance with the repeat marker.&lt;br /&gt;
&lt;br /&gt;
===Execution example 2: Proton protocol===&lt;br /&gt;
Extents do not occur in the Zenith protocol, but a real example in which they do occur is the Proton protocol. This protocol is&lt;br /&gt;
&lt;br /&gt;
{38k,500}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,1,-8,F:8,1,^63m)+&lt;br /&gt;
&lt;br /&gt;
where again the plus sign is a repeat marker.&lt;br /&gt;
To handle extents in the execution model, when each IRstream is pushed on the stack its start time is recorded. If an extent is encountered while processing that IRstream, execution adds its time period to the start time and waits until that is the current time. In this way both the scope of the extent and its conversion to a gap duration get incorporated simply into the model.&lt;br /&gt;
&lt;br /&gt;
Suppose the values of the device code D and function code (OBC) F are D = 34, F = 19. There are no nested IRstreams or bitspecs so processing is straightforward. The bitspec is pushed on the bitspec stack, the IRstream on the IRstream stack and the start time is recorded, say T. The initial durations 16, -8 are converted to a flash and gap and transmitted as the start of the signal. Since in binary notation D = 100010 and the sequencing rule is lsb, the bitfield D:8 translates to the bit sequence&lt;br /&gt;
&lt;br /&gt;
0 1 0 0 0 1 0 0&lt;br /&gt;
&lt;br /&gt;
This is pushed into the buffer of the bitspec but is immediately processed since the next item in the bare IRstream is a duration, not a bitfield. The bitspec shows that the bits are translated to duration sequences one at a time, with the correspondence&lt;br /&gt;
&lt;br /&gt;
0 -&amp;gt; 1,-1 1 -&amp;gt; 1,-3.&lt;br /&gt;
&lt;br /&gt;
The corresponding flashes and gaps are sent as the next part of the signal, followed by those for the two durations 1, -8 that are next in the bare IRstream. The bitfield F:8 translates to the bit sequence&lt;br /&gt;
&lt;br /&gt;
1 1 0 0 1 0 0 0&lt;br /&gt;
&lt;br /&gt;
which is mapped to durations just as for D:8 and sent next since it is followed by another duration, value 1, which follows these as a flash.&lt;br /&gt;
&lt;br /&gt;
At this point the time taken by the flashes and gaps already transmitted totals 76 units. The unit is that specified by the GeneralSpec, namely 500μs, so 76 units is 38 milliseconds. The real-time clock that read T at the start of the processing of this IRstream therefore now reads T+38 milliseconds. The extent value is 63 milliseconds so the execution model waits until the current time is T+63 milliseconds before it performs the next action (which would be a repeat execution of the IRstream). This is a gap of 25 milliseconds, in agreement with the extent syntax of subtracting the total length (38 milliseconds) of the preceding durations in the IRstream from the time period (63 milliseconds) of the extent and treating the extent as a gap duration with the value of that time difference.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;bitspec = &amp;quot;&amp;lt;&amp;quot;, bare irstream, {&amp;quot;|&amp;quot;, bare irstream}, &amp;quot;&amp;gt;&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A bitspec is always followed by an irstream. It acts on the contents of that irstream after any bitfield items within the scope of the bitspec have been translated into bit sequences in accordance with 6.3 and any consecutive bit sequences so produced have been concatenated. Its action is to translate such concatenated bit sequences into bare irstreams.&lt;br /&gt;
&lt;br /&gt;
A bitfield itself defines a mapping of time-ordered bit sequences to bare irstreams. If the number of bare irstreams in the bitspec is 2 to the power n then these correspond, in their order of occurrence in the bitspec, to the bit sequences given by the bitfields 0:n, 1:n, 2:n, 3:n, ... (n-1):n. These bitfields are translated into time ordered bit sequences in the context of the global sequencing rule.&lt;br /&gt;
&lt;br /&gt;
If the number of bare irstreams in the bitspec is not a power of 2 then n is taken as the power in the next greater non-zero power of two and the correspondence between bit sequences and bare irstreams is made in left to right order until the bare irstreams are exhausted. The remaining bit sequences are taken as mapped to empty bare irstreams.&lt;br /&gt;
&lt;br /&gt;
The action of a bitfield on a fully concatenated bit sequence is given by taking its bits in groups of n in their time-sequence order starting from the earliest bit and concatenating the bare irstreams that result from mapping each such group. If the number of bits in the bit sequence is not a multiple of n then it is a semantic error.&lt;br /&gt;
&lt;br /&gt;
==Repeat markers==&lt;br /&gt;
===Description===&lt;br /&gt;
A repeat marker is an optional element of an IRstream, as described in 6.1, that specifies whether and how execution of that IRstream is to be repeated. The possible repeat markers are:&lt;br /&gt;
*&amp;quot;*&amp;quot; which indicates zero or more times;&lt;br /&gt;
*&amp;quot;+&amp;quot; which indicates one or more times;&lt;br /&gt;
*a number, e.g &amp;quot;3&amp;quot;, which indicates that number of times;&lt;br /&gt;
*a number followed by &amp;quot;+&amp;quot;, which indicates at least that number of times.&lt;br /&gt;
&lt;br /&gt;
So &amp;quot;*&amp;quot; is equivalent to &amp;quot;0+&amp;quot; and &amp;quot;+&amp;quot; to &amp;quot;1+&amp;quot;. Assignments and variations in an IRstream may mean that the repeat executions may not all produce the same signal. For repeat markers that specify only a minimum number of repeats, repeats continue beyond the minimum number for as long as the button on the remote is held down, or for one more repeat beyond this if so determined by a variation in accordance with section 12 below. In the execution model of section 14 the remote is a conceptual one.&lt;br /&gt;
&lt;br /&gt;
A simple example is the Dish Network protocol whose inner IRstream was considered in 6.1 In full the protocol is&lt;br /&gt;
&lt;br /&gt;
{57.6k,400}&amp;lt;1,-7|1,-4&amp;gt;(1,-15,(F:-6,U:5,D:5,1,-15)+)&lt;br /&gt;
&lt;br /&gt;
The initial durations 1, -15 are sent only once but the following inner IRstream is sent for as long as the button is held down, but at least once. All repeats are identical, since the inner IRstream contains no assignments or variations.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;repeat marker = &amp;quot;*&amp;quot; | &amp;quot;+&amp;quot; | number, [&amp;quot;+&amp;quot;];&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A repeat marker following an IRstream specifies whether and how execution of that IRstream is to be repeated. The number of repetitions is determined by the repeat marker as follows: &amp;quot;*&amp;quot; signifies that the IRstream is executed zero or more times, &amp;quot;+&amp;quot; signifies one or more times, a number signifies that many times and a number followed by &amp;quot;+&amp;quot; signifies at least that many times. For repeat markers that specify only a minimum number of times of execution, repeats continue beyond the minimum number for as long as the button on the remote is held down, or for one more repeat beyond this if so determined by the semantics of a variation, in accordance with 12.3 below.&lt;br /&gt;
&lt;br /&gt;
==Expressions==&lt;br /&gt;
===Description===&lt;br /&gt;
An expression signifies a value that is derived from other values by calculation. It consists of names, numbers and bitfields connected by standard symbols for arithmetic and logical operations, the whole being enclosed in parentheses. Bitfields in expressions evaluate to the value of the binary form to which they translate, as described in 1.4, rather than the binary form itself.&lt;br /&gt;
&lt;br /&gt;
Operators have their usual order of precedence and parentheses may be used inside an expression to change the order of precedence by grouping. The permitted operators and rules for evaluation are described in 9.3 below for completeness. Since numbers in IRP notation are purely sequences of digits, explicit negative values have to be represented by an expression in which the operator is the unary minus sign, e.g. (-12).&lt;br /&gt;
&lt;br /&gt;
In the execution model, names that occur in an expression take the values that are bound to them in the global environment at the time that the expression is evaluated. The significance of this is that assignments within an IRstream can change the bindings during the course of execution. A simple example of the use of an expression is provided by the Panasonic protocol&lt;br /&gt;
&lt;br /&gt;
{37k,432}&amp;lt;1,-1|1,-3&amp;gt;(8,-4, 2:8,32:8,D:8,S:8,F:8,(D^S^F):8,1,-173)+&lt;br /&gt;
&lt;br /&gt;
in which (D^S^F) is an element of a bitfield and denotes the bitwise exclusive-or of the values of the device code D, subdevice code S and function code F.&lt;br /&gt;
&lt;br /&gt;
When a colon appears in an expression, it is a separator in a bitfield. A minus sign that follows a colon is a prefix to the second primary item of a bitfield, as described in 5.1. A minus sign that is not preceded by a primary item must be a unary minus or a syntactic error. All other minus signs are binary operators, again unless they are a syntactic error. Note that a minus sign following a bitfield is preceded by a primary item, namely the final primary item of the bitfield.&lt;br /&gt;
&lt;br /&gt;
Some examples of unusual but valid expressions are:&lt;br /&gt;
*(~A:-B:C), the value of the bitfield ~A:-B:C&lt;br /&gt;
*(-A:-B:C), unary minus followed by the bitfield A:-B:C&lt;br /&gt;
*(A - - 1), binary minus followed by unary minus, equivalent to (A + 1)&lt;br /&gt;
*(A:B-C:D), difference of the values of the bitfields A:B and C:D&lt;br /&gt;
*(A:(B-C):D), value of a single bitfield with the expression (B-C) as middle primary item&lt;br /&gt;
*(A:(B-C:D)), value of a bitfield whose second primary item is the difference of B and the value of the bitfield C:D.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;expression = &amp;quot;(&amp;quot;, bare expression, &amp;quot;)&amp;quot;;&lt;br /&gt;
bare expression = inclusive or expression;&lt;br /&gt;
inclusive or expression = [inclusive or expression, &amp;quot;|&amp;quot;], exclusive or&lt;br /&gt;
expression;&lt;br /&gt;
exclusive or expression = [exclusive or expression, &amp;quot;^&amp;quot;], and expression;&lt;br /&gt;
and expression = [and expression, &amp;quot;&amp;amp;&amp;quot;], additive expression;&lt;br /&gt;
additive expression = [additive expression, (&amp;quot;+&amp;quot; | &amp;quot;-&amp;quot;)], multiplicative&lt;br /&gt;
expression;&lt;br /&gt;
multiplicative expression = [multiplicative expression, (&amp;quot;*&amp;quot; | &amp;quot;/&amp;quot; | &amp;quot;%&amp;quot;)],&lt;br /&gt;
exponential expression;&lt;br /&gt;
exponential expression = [exponential expression, &amp;quot;**&amp;quot;], unary expression;&lt;br /&gt;
unary expression = [&amp;quot;-&amp;quot;], (primary item | bitfield);&amp;lt;/pre&amp;gt;&lt;br /&gt;
(* &amp;quot;primary item&amp;quot; is defined in 5.2 above *)&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
An expression is a type of primary item that determines an integer value through arithmetic and logical operations performed on the values of primary items or bitfields. Within an expression the value of a bitfield is given by translating it into a binary form in accordance with 5.3 and then taking the value of that binary form considered as an integer in binary notation. This value will be a non-negative integer unless the binary form is of infinite length with all leading bits beyond a cartain point being ones, in which case it is interpreted as a negative integer in 1&#039;s complement form.&lt;br /&gt;
&lt;br /&gt;
The binary operations &amp;quot;+&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;*&amp;quot;, &amp;quot;/&amp;quot; denote the arithmetic operations of addition, subtraction, multiplication and division of integers and &amp;quot;%&amp;quot; denotes the modulo (remainder) operation. The division and modulo operations a/b and a%b are only defined when b is nonzero and they are defined such that the inequalities and equation&lt;br /&gt;
&lt;br /&gt;
0 &amp;lt;= a%b &amp;lt; abs(b), a = (a/b)*b + a%b&lt;br /&gt;
&lt;br /&gt;
are always true, where abs denotes absolute value. This means that in all cases, a/b is the greatest integer that is not greater than the algebraic quotient.&lt;br /&gt;
&lt;br /&gt;
The binary operation &amp;quot;**&amp;quot; denotes exponentiation, i.e. a**b denotes a raised to the power b. The unary operation &amp;quot;-&amp;quot; denotes change of sign, i.e. multiplication by -1.&lt;br /&gt;
&lt;br /&gt;
The operations &amp;quot;&amp;amp;&amp;quot;, &amp;quot;|&amp;quot;, &amp;quot;^&amp;quot; denote the logical operations AND, OR and EXCLUSIVE OR performed bitwise on the binary representations of the values of the operands, where the binary representation of a negative integer is its usual 1&#039;s complement form (but with a potentially infinite number of bits, i.e. with enough bits such that using more bits does not give a different answer). As examples:&lt;br /&gt;
&lt;br /&gt;
(-4)^1 = -5, (-4)^(-1) = 3.&lt;br /&gt;
&lt;br /&gt;
:Note: John Fine&#039;s original postings say explicitly that he wants to keep the C and C++ shift operators &amp;quot;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;quot; out of the expression syntax. He points out that X&amp;lt;&amp;lt;3 is equivalent to X*8 and X&amp;gt;&amp;gt;3 to the bitfield X::3. With integer division as defined above, X&amp;gt;&amp;gt;3 is also equivalent to X/8, a better parallel with X*8, regardless of whether X is positive or negative.&lt;br /&gt;
&lt;br /&gt;
:John does not otherwise say what operators should be allowed in expressions but the above seems a reasonable list judging by his examples. I have included exponentiation as it permits an equivalent of a variable shift, since X&amp;lt;&amp;lt;Y and X&amp;gt;&amp;gt;Y are equivalent to X*2**Y and X/2**Y (as &amp;quot;**&amp;quot; has a higher precedence than &amp;quot;*&amp;quot; and &amp;quot;/&amp;quot;). The bitfield X::Y can be used instead of X&amp;gt;&amp;gt;Y but there is no other equivalent of X&amp;lt;&amp;lt;Y.&lt;br /&gt;
&lt;br /&gt;
Evaluation of expressions should be performed in steps with each step being the action of the appropriate binary operator on two values (or the unary minus on one value) in accordance with the parsing syntax. This ensures correct operator precedence since the precedence of the operators, and left-to-right evaluation of expressions such as (x - y - z) that have multiple operators of equal precedence, is incorporated into the formal syntax. For reference, the order of precedence is the usual one. In&lt;br /&gt;
decreasing order it is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unary -&lt;br /&gt;
**&lt;br /&gt;
*, /, %&lt;br /&gt;
+, -&lt;br /&gt;
&amp;amp;&lt;br /&gt;
^&lt;br /&gt;
|&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one environment in IRP notation, the global environment, but assignments may change the&lt;br /&gt;
value assigned to a name during the course of execution of the protocol. Expressions are evaluated in the&lt;br /&gt;
context of the environment as it is at the point of execution of the expression in the execution model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
===10.1 Description===&lt;br /&gt;
Definitions occur only in the Definitions section of a protocol, which consists of a list of individual definitions separated by commas and enclosed in curly brackets. A definition uses an equals sign to bind a bare expression, i.e. an expression without the enclosing parentheses, to a name as a shorthand form that can be used elsewhere in the protocol, including in other definitions. A definition is never evaluated as such. In the execution process its expression is evaluated at the time that the name is evaluated, in the context of the global environment at that time.&lt;br /&gt;
&lt;br /&gt;
Definitions are commonly used to express the calculation of a checksum. A simple example is the Somfy protocol:&lt;br /&gt;
&lt;br /&gt;
{35.7k}&amp;lt;308,-881|669,-520&amp;gt;(2072,-484,F:2,D:3,C:4,-2300)+{C=F*4+D+3}&lt;br /&gt;
&lt;br /&gt;
The plus sign before the definitions section is the repeat marker for the preceding IRstream. This is equivalent to&lt;br /&gt;
&lt;br /&gt;
{35.7k}&amp;lt;308,-881|669,-520&amp;gt;(2072,-484,F:2,D:3,(F*4+D+3):4,-2300)+&lt;br /&gt;
&lt;br /&gt;
A somewhat more complicated example is the DirecTV protocol:&lt;br /&gt;
&lt;br /&gt;
{38k,600,msb}&amp;lt;1,-1|1,-2|2,-1|2,-2&amp;gt;(5,(5,-2,D:4,F:8,C:4,1,-50)+) {C=7*(F:2:6)+5*(F:2:4)&lt;br /&gt;
+3*(F:2:2)+(F:2)}&lt;br /&gt;
&lt;br /&gt;
This also shows the use of bitfields in expressions. Enclosing the bitfields in parentheses, as here, is an aid to readability but it is not required by the syntax, which is valid and unambiguous if the parentheses are removed. The Somfy protocol remains easily understood when the expression is substituted for the defined name. The expression is sufficiently complicated in the DirecTV protocol that it would become unwieldy to express the protocol without the use of a definition for the checksum.&lt;br /&gt;
&lt;br /&gt;
Whenever the name occurs as a primary item, as does the C in the IRstream of this example, the expression (with its enclosing parentheses) could be substituted for the defined name so the definition is merely a convenience. One case, however, where a definition provides the only way of using an expression is in a duration or extent. Durations and extents both allow the use of names or numbers but not expressions, so to use an expression it must be bound to a name and that name used in its place.&lt;br /&gt;
&lt;br /&gt;
The definitions list in the Definitions section is read and executed from left to right. This is significant only if two different bare expressions are assigned to the same name. There is no valid reason to do so, but this rule eliminates the ambiguity of which one takes precedence. The right-most one takes precedence as the execution of a definition will supersede any existing binding of the defined name.&lt;br /&gt;
&lt;br /&gt;
Definitions must not be self-referential, either directly or indirectly, as this leads to infinite recursion in the processing of definitions in the execution model. Two examples in which this happens are&lt;br /&gt;
&lt;br /&gt;
{X=F+X} and {X=F+Y, Y=X+D}&lt;br /&gt;
&lt;br /&gt;
The problem it causes is easily seen by repeatedly substituting the corresponding expression for each defined name, as discussed above. Neither the syntax nor the execution model prevents this error, but it would lead to an infinite loop during execution. This is an issue for the protocol writer, just as any programming language can give rise to infinite loops in a badly written program.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;definitions = &amp;quot;{&amp;quot;, definitions list, &amp;quot;}&amp;quot;;&lt;br /&gt;
definitions list = | definition, [&amp;quot;,&amp;quot;, definitions list - ];&lt;br /&gt;
(* This allows a definitions list to be empty but the definitions list in&lt;br /&gt;
the second alternative cannot be empty. This is the significance of the&lt;br /&gt;
minus sign, which is the EBNF exception symbol. What is excluded by&lt;br /&gt;
the exception is what follows it, which in this case is empty. *)&lt;br /&gt;
definition = name, &amp;quot;=&amp;quot;, bare expression;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The definitions in a definitions list are executed from left to right. Execution of a definition creates a binding in the global environment. It binds the name on the left of the equals sign to the bare expression on the right, superseding any existing binding of that name.&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
===Description===&lt;br /&gt;
Assignments, like definitions, change the binding of names during the course of execution of a protocol and they have exactly the same form. The distinction is that a definition binds a name to an unevaluated expression, an assignment binds it to the value of an expression. They are distinguished from one another by context. Assignments occur only within IRstreams, definitions only within the Definitions section of a protocol.&lt;br /&gt;
&lt;br /&gt;
When an assignment is executed, the bare expression is evaluated in the global environment as it is at that time. The resulting value is then bound to the name on the left of the assignment, so changing the environment. This makes an assignment such as&lt;br /&gt;
&lt;br /&gt;
T = T + 1&lt;br /&gt;
&lt;br /&gt;
valid. It increments the value bound to T. Because it is self-referential, this would not be valid as a definition.&lt;br /&gt;
&lt;br /&gt;
Assignments are often used in conjunction with definitions, such as to be able to use the same checksum formula in different circumstances within the same protocol. An example is the OrtekMCE protocol, which can be written as&lt;br /&gt;
&lt;br /&gt;
{38.6k,480}&amp;lt;1,-1|-1,1&amp;gt;((P=0,4,-1,D:5,P:2,F:6,C:4,-48m), (P=1,4,-1,D:5,P:2,F:6,C:4,-48m)+,&lt;br /&gt;
(P=2,4,-1,D:5,P:2,F:6,C:4,-48m){C=3+D:1+D:1:1+D:1:2+D:1:3+D:1:4+P:1+P:1:1+&lt;br /&gt;
F:1+F:1:1+F:1:2+F:1:3+F:1:4+F:1:5}&lt;br /&gt;
&lt;br /&gt;
The checksum C is three more than the sum of the binary digits in D, P and F together, or put more simply, is three more than the number of &amp;quot;1&amp;quot; bits in their values. It is quite a complicated expression and is used in each of the three IRstreams of the protocol. It can be considered, alternatively, as one IRstream in which the value of P is 0 on the first transmission, 1 on all others except the last one and 2 on the last transmission, which is sent after the button has been released. But it is not only P that changes, so also does the value of the checksum C since this involves P. The use of an assignment means that the value of P in the global environment changes in the course of execution of the protocol, and as C is recalculated from its defined expression each time it is referenced, the correct value is transmitted each time.&lt;br /&gt;
&lt;br /&gt;
Another use of assignments is to represent a toggle that keeps a fixed value throughout the signal from each button press but which toggles between one button press and the next. An example of this behaviour is the RC5 protocol:&lt;br /&gt;
&lt;br /&gt;
{36k,msb,889}&amp;lt;1,-1|-1,1&amp;gt;(T=T+1,(1:1,~F:1:6,T:1,D:5,F:6,^114m)+).&lt;br /&gt;
&lt;br /&gt;
Only two values are set by a button press, the device code D and function code F. The value of T is maintained by the remote control, incremented on each button press and used to generate the toggle bit T:1 in the IRstream. This is an example of persistence of the global environment, a concept that forms part of the execution model of section 14. The internal state of the remote changes when a button is pressed, and the new state persists until the next button press changes it again. This is modelled by having bindings in the global environment remain in existence until explicitly changed by the pressing of a button on the conceptual remote of the execution model. The value of T is unknown when the protocol is executed, but whatever it may be, it will be one greater on the next button press.&lt;br /&gt;
&lt;br /&gt;
As a final example of the use of assignments, consider the AirAsync protocol:&lt;br /&gt;
&lt;br /&gt;
(37.7k,840)&amp;lt;1|-1&amp;gt;(N=0,(1,B:8:N,-2,N=N+8)+)&lt;br /&gt;
&lt;br /&gt;
The value of N is 0 on the first transmission of the repeating IRstream but increases by 8 on each successive transmission. The bitfield B:8:N is therefore the least significant 8 bits on the first transmission, the next 8 on the next transmission, and so on. The sequencing rule is lsb, so the result is that the value of B is sent in lsb order, eight bits at a time, on successive repeats, however large may be the value of B. This protocol represents standard asynchronous transmission with one start bit, eight data bits and two stop bits.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;assignment = name, &amp;quot;=&amp;quot;, bare expression;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
When an assignment is executed, the bare expression is evaluated according to the current state of the global environment. The resulting value is then bound to the given name, so changing the environment.&lt;br /&gt;
&lt;br /&gt;
==Variations==&lt;br /&gt;
===Description===&lt;br /&gt;
The OrtekMCE protocol considered in 11.1 had an IRstream that varied systematically between its first&lt;br /&gt;
transmission, its last one and all others in between. The first one is sent on button down, the middle ones&lt;br /&gt;
while the button remains held down and the last one on button up. A number of other protocols share this&lt;br /&gt;
pattern, yet more share a pattern of variation between button down and button held but without a&lt;br /&gt;
transmission on button up.&lt;br /&gt;
&lt;br /&gt;
These patterns can be represented in IRP notation without the need for any new structure, as the example of the OrtekMCE protocol showed. When the protocol is written out in full in the form given in 11.1, it does however obscure the fact that the three different IRstreams are all small variations of one another. The use in IRstreams of a variation both simplifies the appearance of the protocol and clarifies this relationship between the various transmissions.&lt;br /&gt;
&lt;br /&gt;
A variation consists of two or three alternative bare IRstreams given together, each enclosed in square brackets as delimiters. Typically the bare IRstreams will consist only of a single item, but this is not required. On first transmission (button down) the first alternative is used, on middle transmissions (button held) the second alternative is used, and if a third alternative is present then on button up the IRstream is sent once more with the third alternative being used. The OrtekMCE protocol can therefore be written in the simpler form&lt;br /&gt;
&lt;br /&gt;
{38.6k,480}&amp;lt;1,-1|-1,1&amp;gt;([P=0][P=1][P=2],4,-1,D:5,P:2,F:6,C:4,-48m)+{C=3+D:1+D:1:1+&lt;br /&gt;
D:1:2+D:1:3+ D:1:4+P:1+P:1:1+F:1+F:1:1+F:1:2+F:1:3+F:1:4+F:1:5}&lt;br /&gt;
&lt;br /&gt;
A simpler example is the CanalSat protocol:&lt;br /&gt;
&lt;br /&gt;
{55.5k,250,msb}&amp;lt;-1,1|1,-1&amp;gt;([T=0][T=2],1:1,D:7,S:6,T:2,F:7,-89m)+&lt;br /&gt;
&lt;br /&gt;
Here there is no dependent checksum, the protocol could be written without the use of T as&lt;br /&gt;
&lt;br /&gt;
{55.5k,250,msb}&amp;lt;-1,1|1,-1&amp;gt;((1:1,D:7,S:6,0:2,F:7,-89m), (1:1,D:7,S:6,2:2,F:7,-89m)+)&lt;br /&gt;
&lt;br /&gt;
but use of a variation emphasises that there is only a small systematic difference between the first and subsequent frames.&lt;br /&gt;
&lt;br /&gt;
There are a few protocols in which one IRstream is transmitted on button down, a related one on button up, but nothing while the button is held. This typically corresponds to buttons of a mouse, where holding down a mouse button does nothing but there is an effect on button up. To meet this situation, an alternative with an empty IRstream signifies that the remainder of the IRstream should be skipped. An example is the variant of the Sejin protocol that corresponds to the buttons of a three-button mouse. This is:&lt;br /&gt;
&lt;br /&gt;
{38.8k,310,msb}&amp;lt;-1|1&amp;gt;(&amp;lt;8:4|4:4|2:4|1:4&amp;gt;([F=B][ ][F=0],3,3:2,(-D):6,B:2,0:16,E:4,C:4,-3600u)+)&lt;br /&gt;
{C=((-D):4:2+4*(-D):2+F+E)&amp;amp;15}&lt;br /&gt;
&lt;br /&gt;
In this, D is the device code but its negative is sent when the mouse part of the protocol is used. B numbers the buttons, 1,2 or 3. On button up the IRstream is sent with B=0, the same for all buttons as the button down part has shown which button is concerned. The checksum C is calculated with either the button number or 0 as appropriate. The middle alternative [ ] indicates that nothing is sent while the button is held.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;variation = 2*alternative, [alternative];&lt;br /&gt;
alternative = &amp;quot;[&amp;quot;, bare irstream, &amp;quot;]&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A variation is a permitted type of irstream item that operates in conjunction with a repeat marker for the irstream that contains it. If the repeat marker specifies an indefinite number of times of execution with a given minimum then the state, held or released, of the button of the remote control affects the effect of the variation but this is not so if the number of repeats is definite.&lt;br /&gt;
&lt;br /&gt;
With a definite number in the repeat marker, on the first execution of the IRstream the bare IRstream of any first alternative is executed. If a variation is encountered with three alternatives then on the last execution of the IRstream, provided this is not also the first, that of the third alternative is executed. In all other cases that of the second alternative is executed.&lt;br /&gt;
&lt;br /&gt;
The same holds with an indefinite number in the repeat marker but an additional rule is required to determine the actual number of times that the IRstream is executed. The IRstream is repeatedly executed for as long as the button is held down at the start of an execution. Repeats also continue beyond that, if necessary, until all of the following are true:&lt;br /&gt;
*the minimum number given in the repeat marker has been performed;&lt;br /&gt;
*at the end of the last execution the button is no longer held;&lt;br /&gt;
*the successive executions satisfy the rule for a fixed number of repeats with that fixed number being the actual number.&lt;br /&gt;
&lt;br /&gt;
Note the implicit nature of these conditions. It is not possible to tell whether an execution is going to be the last one if the button was still held when it commenced, so if a variation with three alternatives is encountered, it may be necessary to perform one further execution after the button has been released in order to meet the third condition.&lt;br /&gt;
&lt;br /&gt;
If the bare irstream of an alternative is empty then its execution consists of skipping the remainder of the IRstream and proceeding to its next execution.&lt;br /&gt;
&lt;br /&gt;
==Names and numbers==&lt;br /&gt;
===Description===&lt;br /&gt;
For the sake of completeness, names and numbers are defined formally in this section. They were defined informally in 1.2. All that is needed to add here is that the presence of assignments or variations may mean that a name may not evaluate to the same value on each occasion that it is evaluated. A name bound to a value evaluates to the value that is bound to it in the global environment at the time that it is evaluated. A name bound to a bare expression is evaluated by evaluating that expression.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;number = &amp;quot;0&amp;quot; | nonzero digit, {digit};&lt;br /&gt;
number with decimals = number, [&amp;quot;.&amp;quot;, digit, {digit} ];&lt;br /&gt;
digit = &amp;quot;0&amp;quot; | &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;;&lt;br /&gt;
nonzero digit = digit - &amp;quot;0&amp;quot;;&lt;br /&gt;
name = letter, {letter | digit};&lt;br /&gt;
letter = &amp;quot;A&amp;quot;|&amp;quot;B&amp;quot;|&amp;quot;C&amp;quot;|&amp;quot;D&amp;quot;|&amp;quot;E&amp;quot;|&amp;quot;F&amp;quot;|&amp;quot;G&amp;quot;|&amp;quot;H&amp;quot;|&amp;quot;I&amp;quot;|&amp;quot;J&amp;quot;|&amp;quot;K&amp;quot;|&amp;quot;L&amp;quot;|&amp;quot;M&amp;quot;|&amp;quot;N&amp;quot;|&amp;quot;O&amp;quot;|&amp;quot;P&amp;quot;&lt;br /&gt;
|&amp;quot;Q&amp;quot;|&amp;quot;R&amp;quot;|&amp;quot;S&amp;quot;|&amp;quot;T&amp;quot;|&amp;quot;U&amp;quot;|&amp;quot;V&amp;quot;|&amp;quot;W&amp;quot;|&amp;quot;X&amp;quot;|&amp;quot;Y&amp;quot;|&amp;quot;Z&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The value of a number is the non-negative integer represented by its sequence of digits in decimal notation.&lt;br /&gt;
&lt;br /&gt;
The value of a number with decimals is the non-negative real number represented by its sequence of digits and optional decimal point in decimal notation.&lt;br /&gt;
&lt;br /&gt;
The value of a name is the value bound to it at the time of evaluation, or is the result of evaluating the expression bound to it at that time, as the case may be.&lt;br /&gt;
&lt;br /&gt;
==Execution model==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The level of recursion permitted in the IRP notation is sufficiently great that a formal execution model is needed to ensure a consistent interpretation of some of its more complex possibilities. This section provides such a model in a natural language formulation.&lt;br /&gt;
&lt;br /&gt;
The execution environment conceptually contains a timer and a carrier generator. All processes are considered as instantaneous other than TRANSMIT, which turns on the carrier generator for a specified time, and WAIT, which waits for a specified time. Processes are synchronous, so that any process that follows a TRANSMIT or WAIT is not performed until the TRANSMIT or WAIT is completed.&lt;br /&gt;
&lt;br /&gt;
The execution model has two aspects, static and dynamic. The static aspect describes such things as how expressions are interpreted and how bitfields are converted to binary forms. Collectively the operations of the static aspect are described as evaluation. They are performed by the operator EVALUATE. The dynamic aspect describes such things as how IRstreams are processed to produce the flashes and gaps of the signal. The dynamic procedures are performed by the operator PROCESS. Both aspects are covered by the semantics specified in the previous sections but this execution model puts them together to form a coherent whole.&lt;br /&gt;
&lt;br /&gt;
Processing is initiated by the pressing of a button on a conceptual remote control. The button press binds certain names to values in the global environment. These correspond to the Device Code and OBC or the like, the values that are set externally by means outside the scope of the IRP notation. Also set externally is the duty cycle of the carrier generator. This is typically 33% or thereabouts, but again it is outside the scope of the IRP notation. With these external processes performed, the button press initiates the procedure &amp;quot;PROCESS protocol&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The global environment is considered to have a continuing existence between button presses. The external process of binding names to values when a button is pressed changes the binding of those names but all other names are considered to have bound values as well, albeit possibly unknown values. This feature of the model permits names to be used that are neither bound to a value by a button press nor bound to an expression by a definition. This is the mechanism by which certain types of toggle can be represented. Some protocols have a toggle bit that alternates in value between successive button pressings, to enable successive presses of the same button to be distinguished from a single longer press. When a user picks up the remote and presses a button, the state of the toggle that will be used is unknown. What is known is that it will be different on the next press. The remote has &amp;quot;state&amp;quot;, i.e. it maintains internal variables such that the same user action at different times may not result in precisely the same effect. Persistence of the global environment permits modelling of remotes with &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Data Structures===&lt;br /&gt;
[[IRP Execution Model]]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IRP_Notation&amp;diff=3425</id>
		<title>IRP Notation</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IRP_Notation&amp;diff=3425"/>
		<updated>2025-11-23T16:21:01Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Specification of IRP Notation&#039;&#039;&#039; - &#039;&#039;by Graham Dixon&#039;&#039; ([https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7926 PDF Version])&lt;br /&gt;
&lt;br /&gt;
The notation currently used for describing IR protocols, generally just referred to as “IRP notation”, was developed by John Fine in a series of postings on a restricted Yahoo forum on 13 March 2003 and a few following days. Partial descriptions have appeared since in various messages on the JP1 website, but I have been unable to find a comprehensive description. I feel it is time for one to appear.&lt;br /&gt;
&lt;br /&gt;
This document attempts to be a full specification in sufficient detail that an automated process to parse and execute a protocol in IRP notation could be written without the fear that some possible construction has been overlooked. The sections on syntax give an informal description followed by a formal specification of the syntax and a description of the semantics of that syntax. A later section of the document gives an execution model written in the context of a conceptual remote control. This structure leads to some inevitable duplication in places, but I think the benefits outweigh the disadvantages.&lt;br /&gt;
&lt;br /&gt;
==General principles of IRP notation==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The function of an IR protocol is to transmit a set of named numerical values from one device to another, normally from a remote control to the piece of equipment that it controls, by flashing an infrared light on and off. The IR Protocol (IRP) notation is a means of describing how this is to be done. The names of the values are commonly “Device code”, “Subdevice code” and “Function code”, but some or even all of these may be absent and others may be present. There may also be values for other purposes, such as&lt;br /&gt;
&lt;br /&gt;
*a calculated “Checksum” to provide a confirmation that the signal has been received correctly, or &lt;br /&gt;
*a “Toggle” that the sender changes from one signal to the next to enable the receiver to distinguish two otherwise identical signals from one longer signal.&lt;br /&gt;
&lt;br /&gt;
The infrared signal consists of a series of flashes of light with gaps in between. In a flash the light is usually not on continuously, but is being pulsed on and off rapidly at a fixed frequency, known as the &#039;&#039;carrier frequency&#039;&#039;. In the gaps, the light is fully off. As an example, a flash lasting 1200 microseconds could consist of 48 on/off cycles at a frequency of 40kHz and could be followed by a gap of 600 microseconds before the next flash. The information is carried in the durations of the flashes and gaps. The frequency itself carries no information. Frequencies vary between protocols, but are fixed for any individual protocol.&lt;br /&gt;
&lt;br /&gt;
In the language of IR protocols a flash and its following gap is generally known as a “burst pair”. The IRP notation describes the encoding process by which the values to be transmitted are converted into a stream of burst pairs with varying durations.&lt;br /&gt;
&lt;br /&gt;
===Basic objects===&lt;br /&gt;
The basic objects of the IRP notation are names and numbers. Names are sequences of capital letters and&lt;br /&gt;
digits but must not start with a digit. Numbers are sequences of digits but must not start with zero unless&lt;br /&gt;
they consist solely of the digit zero. The notation is composed of names and numbers together with other characters from the ASCII character set. White space, e.g. space characters, tabs, line feeds and form&lt;br /&gt;
feeds, are ignored but may be used anywhere for convenience and ease of readability.&lt;br /&gt;
&lt;br /&gt;
Names and numbers both ultimately represent values. Names are used for two purposes. External names are given values by means outside the IRP notation. These values are the data that the protocol is to convey. Internal names correspond to checksums or any other derived values. Internal names are given values by means of definitions that show how they are to be calculated.&lt;br /&gt;
&lt;br /&gt;
For conciseness it is common to use single capital letters for names, with the correspondence&lt;br /&gt;
&lt;br /&gt;
D = Device code&amp;lt;br /&amp;gt;&lt;br /&gt;
S = Subdevice code&amp;lt;br /&amp;gt;&lt;br /&gt;
F = Function code (otherwise called OBC or Original Button Code)&amp;lt;br /&amp;gt;&lt;br /&gt;
C = Checksum&amp;lt;br /&amp;gt;&lt;br /&gt;
T = Toggle.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other single letters are also used as required, but so are abbreviations such as OEM1.&lt;br /&gt;
&lt;br /&gt;
The values represented by names and numbers are integers. Values are usually positive integers or zero, but negative integer values can also occur, such as in the value of a name that represents displacement of a mouse. The value of a number is that number regarded as an integer expressed in decimal notation. Negative integers cannot be represented directly by numbers. A negative integer has to be enclosed in parentheses, e.g. (-12). This is a simple example of an expression. It is not a basic object as it is composed of the number 12 together with the non-alphanumeric symbols &amp;quot;(&amp;quot;, &amp;quot;-&amp;quot; and &amp;quot;)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===The execution process===&lt;br /&gt;
Execution is the process of generating the IR signal from the representation of a protocol in IRP notation. There is a specification of the execution process in section 14 in terms of the action of a conceptual remote control. The resulting signal is described in terms of the durations of the flashes and gaps that compose it, together with the frequency and duty cycle of the carrier wave that is sent during a flash.&lt;br /&gt;
&lt;br /&gt;
The carrier frequency was described in 1.1. The duty cycle is the percentage of the cycle time that the IR light is on. A carrier frequency of 40kHz means that there are 40000 cycles per second, so each lasts 25μs. If each cycle consists of the IR light being on for 9μs and off for 16μs then the duty cycle is 9/25, or 36%. The frequency varies substantially between one protocol and another and is given in the IRP notation. The duty cycle is a matter for the implementation and is not given in the IRP notation. Duty cycles are typically around 33%. A larger value means that the batteries in a remote control will last less long but the range of the signal will be greater.&lt;br /&gt;
&lt;br /&gt;
===Execution concepts===&lt;br /&gt;
There are two intermediate concepts used in the specification of the execution process, a binary form and a bit sequence. These do not have specific IRP notations as they do not occur as such in the IRP representation of protocols. A binary form is essentially the type of representation of an integer value that is used internally in computers, namely the value expressed in binary notation with a fixed bit length. The four-bit binary form for the value 5, for example, is 0101, and for -5 is 1011 (as these two add to 0000 when overflow is ignored).&lt;br /&gt;
&lt;br /&gt;
A binary form has a numerical value. This is its value treated as the binary representation of an integer on the assumption that any leading bits not included in the binary form are 0&#039;s. It may seem pedantic to be this specific, but it is necessary since the value of a finite length binary form that represents a negative integer is not that integer, it is a positive integer which depends on that length. The value of the 4-bit binary form for -5 given above is 11, the value of the 6-bit binary form for -5 is 59.&lt;br /&gt;
&lt;br /&gt;
Binary forms of infinite length can occur conceptually during execution. These are the only binary forms whose value can be negative. They occur implicitly in computers in the Arithmetic Shift Right operation on the binary representation of signed integers. In this operation the vacant space created on the left by the shift is filled not with zero but with a copy of the most significant bit of the unshifed value, as if that bit value continued indefinitely to the left and one bit of it has just been shifted into visibility.&lt;br /&gt;
&lt;br /&gt;
The other intermediate concept in execution is a bit sequence. This is a sequence of bits given in the order in which they are to be processed for transmission. It is therefore a sequence in time, but when written the sequence order is from left to right. A bit is a binary digit, as in the binary notation for integers, so a written bit sequence looks very much like an integer in binary form. They are not the same, however, and the distinction is very important in IRP execution. The bits in a bit sequence have no interpretation in themselves. They are constructed from the values to be sent, and values are reconstructed from them when received, but it is the structure of the protocol and not the rules of binary notation that determines the relationship between values and bit sequences. In particular there is no demarcation between consecutive bit sequences constructed from distinct values.&lt;br /&gt;
&lt;br /&gt;
During the execution process, values are translated into binary forms, binary forms into bit sequences and bit sequences into the sequences of flash and gap durations that describe the signal, so in outline the steps of the execution process are&lt;br /&gt;
&lt;br /&gt;
values --&amp;gt; binary forms --&amp;gt; bit sequences --&amp;gt; duration sequences&lt;br /&gt;
&lt;br /&gt;
===Translation objects===&lt;br /&gt;
The rule for each of these translation steps in the execution process is specified by a particular type of object in IRP notation. The translation of values to binary forms is described by a bitfield, that of binary forms to bit sequences by a sequencing rule and that of bit sequences to duration sequences by a bitspec.&lt;br /&gt;
&lt;br /&gt;
These object differ in their scope. The scope of a bitfield is an individual value. The scope of a sequencing rule is the entire protocol. The scope of a bitspec is in between these two extremes. It covers everything up to the point at which another bitspec is given that changes the rule.&lt;br /&gt;
&lt;br /&gt;
Not all durations in the signal come from values in this way. There are also flashes and gaps in the signal that are for control purposes, such as to distinguish one protocol from another. These do not depend on the data. They are described by specific notations for a flash duration and a gap duration.&lt;br /&gt;
&lt;br /&gt;
There remains one other type of translation object. This is a gap of variable duration that is used to make the total extent in time of the signal, or some major part of the signal, up to a constant length that is independent of the data being sent. It is of variable duration since the lengths of the individual flashes and gaps do depend on the data. The notation for such a variable gap is an extent. The typical use of extents is as the lead-out gap at the end of the signal. Many buttons on a remote control repeat the signal throughout the time that the button is held down. Using an extent as a lead-out ensures that the frequency of repeats does not depend on the data being sent. In the translation phase the data is known, so that an extent can be translated into a specific gap duration&lt;br /&gt;
&lt;br /&gt;
===Overall structure===&lt;br /&gt;
The complete description of a protocol in IRP notation is composed of three or four sections:&lt;br /&gt;
*A GeneralSpec that specifies the carrier frequency, the sequencing rule and a time unit that can be used in durations and extents;&lt;br /&gt;
*A Bitspec that provides the default rule for the translation of bit sequences to duration sequences.&lt;br /&gt;
*An IRStream that gives the sequence of data to be translated and transmitted.&lt;br /&gt;
*If required, Definitions that give the expressions required to calculate the values of internal names.&lt;br /&gt;
&lt;br /&gt;
These are all described in detail in the following sections. The IRstream section can contain further bitspecs and IRstreams but there is only one GeneralSpec and at most one Definitions section. The Bitspec section provides only a default rule as bitspecs within the IRstream section may change the rule for certain parts of the data.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
Each descriptive part of the specification will be accompanied by a formal syntax given in EBNF (Extended Backus-Naur Form) notation and by a precise description of the semantics. An execution model that incorporates these semantics is given in section 14.&lt;br /&gt;
&lt;br /&gt;
There are various extensions of BNF notation in use. This document uses the version standardized by ISO in ISO/IEC 14977:1996, which is freely available on the ISO website.&lt;br /&gt;
&lt;br /&gt;
The characters used in the IRP notation are all characters of the International Reference Version of ISO/IEC 646:1991, commonly referred to as ASCII. Certain characters have more than one usage in the IRP notation, distinguished from one another by context. In particular, the LESS-THAN SIGN and GREATER-THAN SIGN also serve as left and right diamond brackets respectively and the HYPHENMINUS is used both as a minus sign and as a symbol with a meaning specific to IRP notation.&lt;br /&gt;
&lt;br /&gt;
The formal syntax of the overall structure is:&lt;br /&gt;
&#039;&#039;&#039;protocol = generalspec, bitspec, irstream, [definitions];&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In EBNF notation, square brackets denote an optional item. There are no semantics at this level.&lt;br /&gt;
&lt;br /&gt;
==The GeneralSpec section==&lt;br /&gt;
===Description===&lt;br /&gt;
The GeneralSpec section specifies the carrier frequency and certain data that apply throughout the translation process. It is a list of up to three items, separated by commas and enclosed in curly brackets. Three types of item can occur in the list. Each type is optional and there can be at most one item of each type. They are:&lt;br /&gt;
*A frequency item, consisting of a number followed by the letter &amp;quot;k&amp;quot;. It gives the carrier frequency in kilohertz. The default is a frequency of &amp;quot;0k&amp;quot;, which signifies a baseband signal in which the light stays on continuously during a flash. Although optional, a frequency item is normally given since the default value is uncommon and so is best specified explicitly when it applies.&lt;br /&gt;
*A unit item, consisting of a number followed optionally by either of the letters &amp;quot;u&amp;quot; or &amp;quot;p&amp;quot;. It determines a unit of time that can be used in durations and extents.&lt;br /&gt;
**No suffix, or a suffix &amp;quot;u&amp;quot; indicates that the unit is that number of microseconds.&lt;br /&gt;
**A suffix &amp;quot;p&amp;quot; indicates that the unit is the time taken for that number of pulses of the carrier frequency, so the unit in microseconds is the given value multiplied by (1000/f), where f is the number preceding the &amp;quot;k&amp;quot; in the frequency item.&lt;br /&gt;
**If there is no unit item, it defaults to &amp;quot;1u&amp;quot;, i.e. one microsecond.&lt;br /&gt;
*An order item, which gives the sequencing rule that applies globally for the conversion of binary forms to bit sequences. If present it takes one of the values &amp;quot;lsb&amp;quot; or &amp;quot;msb&amp;quot;. If it is &amp;quot;lsb&amp;quot; then the time ordering of the bits in the bit sequence is that the sequence starts with the least significant bit (&amp;quot;lsb&amp;quot;). If it is &amp;quot;msb&amp;quot; then the ordering is to start with the most significant bit. The default is &amp;quot;lsb&amp;quot;. In contrast to the situation with the frequency item, the default is the most common rule and it is not usually specified explicitly.&lt;br /&gt;
&lt;br /&gt;
The number in a frequency item can include a decimal point. This is the only situation in IRP notation in which numbers can be other than integers.&lt;br /&gt;
&lt;br /&gt;
These items can be given in any order. Examples of possible GeneralSpecs are:&lt;br /&gt;
&lt;br /&gt;
{ }, {38.4k, 564}, {msb, 889u}, {10p, msb, 40k}&lt;br /&gt;
&lt;br /&gt;
In the first of these, all items take their default value, so the signal is baseband, the sequencing rule is to convert binary forms to bit sequences in lsb order and the time unit is one microsecond. In the last of these, the carrier frequency is 40 kilohertz, binary forms are converted in msb order and the time unit is 10*(1000/40) = 250 microseconds.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
The complication in giving a formal syntax for the GeneralSpec section comes from the order of the item types being arbitrary. This is dealt with by allowing each item to be of any type but then imposing a restriction that no two items can be of the same type, as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;generalspec = &amp;quot;{&amp;quot;, generalspec list, &amp;quot;}&amp;quot;;&lt;br /&gt;
generalspec list = | (generalspec item, 2*[&amp;quot;,&amp;quot;, generalspec item])&lt;br /&gt;
- generalspec list with repeats;&lt;br /&gt;
generalspec item = frequency item | unit item | order item;&lt;br /&gt;
frequency item = number with decimals, &amp;quot;k&amp;quot;;&lt;br /&gt;
unit item = number, [&amp;quot;u&amp;quot; | &amp;quot;p&amp;quot;];&lt;br /&gt;
order item = &amp;quot;lsb&amp;quot; | &amp;quot;msb&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
generalspec list with repeats =&lt;br /&gt;
{generalspec item, &amp;quot;,&amp;quot;}, frequency item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
frequency item, {&amp;quot;,&amp;quot;, generalspec item}&lt;br /&gt;
| {generalspec item, &amp;quot;,&amp;quot;}, unit item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
unit item, {&amp;quot;,&amp;quot;, generalspec item}&lt;br /&gt;
| {generalspec item, &amp;quot;,&amp;quot;}, order item, &amp;quot;,&amp;quot;, {generalspec item, &amp;quot;,&amp;quot;},&lt;br /&gt;
order item, {&amp;quot;,&amp;quot;, generalspec item};&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vertical bars separate alternatives. The vertical bar at the start of generalspec list is preceded by an empty alternative, signifying that a generalspec list can be empty. The other alternative is one generalspec item followed by two more optional ones each preceded by a comma separator, provided that the list so constructed is not also a generalspec list with repeats. This consists of all lists of items that include two of the same type, specified separately for each possible repeated type. Curly brackets in EBNF notation denote an arbitrary number of repetitions, including zero.&lt;br /&gt;
&lt;br /&gt;
The undefined identifier number is the basic object described in 1.2. Its formal definition is given in 13.2 The identifier number with decimals means the same except that a decimal point is allowed.&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The real number in a frequency item is the carrier frequency in kilohertz. A zero frequency means that the signal is baseband, i.e. during a flash the IR light is on continuously. This is the default when this item is absent.&lt;br /&gt;
&lt;br /&gt;
A unit item specifies a length of time that can be used as a time unit in durations and extents. If it has no suffix or the suffix &amp;quot;u&amp;quot; then number is the length of time in microseconds. If it has suffix &amp;quot;p&amp;quot; then the length of time in microseconds is number multiplied by (1000/f) where f is the real number preceding the &amp;quot;k&amp;quot; in the frequency item. The result of the multiplication is rounded to the nearest integer. If the unit item is absent then it specifies a time unit of one microsecond.&lt;br /&gt;
&lt;br /&gt;
The order item specifies the global sequencing rule. If it is absent or has the value &amp;quot;lsb&amp;quot; then binary forms are converted to bit sequences by starting with the least significant bit. If it has value &amp;quot;msb&amp;quot; then they are converted starting with the most significant bit.&lt;br /&gt;
&lt;br /&gt;
==Durations==&lt;br /&gt;
===Description===&lt;br /&gt;
Durations specify a length of time in the sending of the IR signal. They describe the modulation of the signal carrier and have a meaning only as part of a sequence. There are two types of duration, a flash duration and a gap duration. A flash duration is a length of time for which the signal carrier is &amp;quot;on&amp;quot;. A gap duration is a length of time for which it is &amp;quot;off&amp;quot;. These are the only two states of the carrier during a signal; it is either fully on or fully off.&lt;br /&gt;
&lt;br /&gt;
The notation for a flash duration is simply the length of time, given in terms of a time unit determined by&lt;br /&gt;
a suffix to the numerical value as follows:&lt;br /&gt;
*&amp;quot;m&amp;quot; indicates that the duration is in milliseconds;&lt;br /&gt;
*&amp;quot;u&amp;quot; indicates that the duration is in microseconds;&lt;br /&gt;
*&amp;quot;p&amp;quot; indicates that the duration is in pulses of the carrier frequency, as described in 2.1 above;&lt;br /&gt;
*no suffix indicates that the duration is in the time unit determined by the unit item of the GeneralSpec section.&lt;br /&gt;
&lt;br /&gt;
The notation for a gap duration is the same but prefixed by &amp;quot;-&amp;quot;. If there are two consecutive flash durations or gap durations in a sequence then the effect is the same as a single one for the total of the two times. There is nothing in the transmitted signal to indicate where one ends and the next starts.&lt;br /&gt;
&lt;br /&gt;
Suppose that the GeneralSpec is {40k, 200}. Then if A = 150, the very artificial sequence 15p,-1m,3,Au,-20m means:&lt;br /&gt;
*a flash of 15*(1000/40) = 375 microseconds, followed by&lt;br /&gt;
*a gap of 1 millisecond = 1000 microseconds, followed by&lt;br /&gt;
*a flash of 3*200 + 150 = 750 microseconds, followed by&lt;br /&gt;
*a gap of 20 milliseconds = 20000 microseconds.&lt;br /&gt;
&lt;br /&gt;
This illustrates that units can be mixed, that names can be used and can have suffixes and that flashes and gaps do not have to alternate.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;duration = flash duration | gap duration;&lt;br /&gt;
flash duration = name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&lt;br /&gt;
gap duration = &amp;quot;-&amp;quot;, name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&lt;br /&gt;
name or number = name | number;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A flash duration is a length of time in an IR signal for which the carrier is in the ON state. A gap duration is a length of time for which it is in the OFF state.&lt;br /&gt;
&lt;br /&gt;
The suffix determines how the value of the name or number is converted into a length of time in microseconds, as follows:&lt;br /&gt;
*For suffix &amp;quot;u&amp;quot; the number is already the time in microseconds.&lt;br /&gt;
*For suffix &amp;quot;m&amp;quot;, multiply by 1000.&lt;br /&gt;
*For suffix &amp;quot;p&amp;quot;, multiply by (1000/f) where f is the real number preceding the &amp;quot;k&amp;quot; in the frequency item of the GeneralSpec.&lt;br /&gt;
*If there is no suffix, multiply by the length in microseconds of the time unit specified by the unit item of the GeneralSpec.&lt;br /&gt;
&lt;br /&gt;
==Extents==&lt;br /&gt;
===Description===&lt;br /&gt;
An extent is a gap duration whose length in time cannot be given explicitly in the protocol. An extent has a scope which consists of a consecutive range of items that immediately precede the extent in the order of transmission in the signal. The role of an extent is to ensure that the time taken for this range of items to be transmitted, plus the following gap (corresponding to the extent), has a constant value even though the time taken by the individual items may vary according to the data being transmitted. It is this constant value that is given in the extent. The precise scope of an extent has to be defined in the context in which it is used.&lt;br /&gt;
&lt;br /&gt;
The notation for an extent is as that for a gap duration, except that the prefix is &amp;quot;^&amp;quot; instead of &amp;quot;-&amp;quot;. When all the items in its scope have been translated into durations, the extent can be translated into a gap duration by subtracting the total length in time of the durations in its scope from the time given in the extent. An artificial example is&lt;br /&gt;
&lt;br /&gt;
1,-4,D,^25&lt;br /&gt;
&lt;br /&gt;
as an extent with its preceding scope. This translates to 1,-4,10,-10 if D = 10 but to 1,-4,5,-15 if D = 5, the final gap making the duration as a whole up to 25 units regardless of the value of D.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;extent = &amp;quot;^&amp;quot;, name or number, [&amp;quot;m&amp;quot;|&amp;quot;u&amp;quot;|&amp;quot;p&amp;quot;];&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The name or number together with the suffix, if any, determine a length of time as in the semantics of a duration described in 3.3.&lt;br /&gt;
&lt;br /&gt;
An extent has a scope that has to be defined in any context in which an extent can be used. During execution, all the items in the scope are converted into durations. The extent then translates into a gap duration by subtracting the total length in time of these durations from the length of time determined by the extent.&lt;br /&gt;
&lt;br /&gt;
==Bitfields==&lt;br /&gt;
===Structure and interpretation===&lt;br /&gt;
A bitfield is a translation object that converts a specific value to a binary form. Note, however, that the binary form may be constructed from only a portion of the bits in the binary expression of the value and that even if it corresponds to all these bits then the value of the binary form may not be the same as the value from which it was constructed.&lt;br /&gt;
&lt;br /&gt;
A simple example of a bitfield is D:6. The binary form consists of the least significant six bits of D, with the binary representation of D considered as padded on the left with potentially an infinite number of zeroes. So if D = 244, its value in binary notation is ...00011110100 and the least significant six bits give the binary form 110100. If D = 5, its value in binary notation is ...00000101 and the least significant six bits give the binary form 000101.&lt;br /&gt;
&lt;br /&gt;
A bitfield such as D:6:2 is similar, but leaves out the two least significant bits and selects the next six. For D = 244 and D = 5 this gives respectively the binary forms 111101 and 000001. The bitfield D:6 is equivalent to D:6:0.&lt;br /&gt;
&lt;br /&gt;
The value concerned can be negative. In this case no padding is required. The complete binary representation of a negative integer (in the usual 1&#039;s complement form) extends on the left to infinity with all tbe bits beyond a certain point being 1. So -5 is ...11111011 where the dots denote an infinite sequence of ones (since when this is added to ...000000101 the digits of the sum are all zero). If D = -5, the binary form given by D:6 is 111011. To write this using an explicit value, we must use brackets, thus (-5):6 to show that the minus sign is part of the value and not a prefix of the IRP notation. This is an example of the use of an expression in a bitfield. Expressions are described in more detail in 9.1 below.&lt;br /&gt;
&lt;br /&gt;
There are three further refinements to the bitfield notation. The first element of the bitfield can have a prefix &amp;quot;~&amp;quot;. This complements each bit in the binary form, i.e. changes a 1 to a 0 and vice versa. The second element can be absent or, if present, can have a prefix &amp;quot;-&amp;quot;. If it is absent then the bit length of the binary form is conceptually infinite, as described above. In this case the third element must be present to prevent the bitfield ending with a colon and so giving rise to ambiguous syntax. A third element can always be added without changing the interpretation, so although D: is not valid, D::0 is equivalent and is valid. Prefixing the second element with &amp;quot;-&amp;quot; reverses the order of the bits in the binary form, so the most significant bit becomes the least significant bit, etc. So with D = 244, ~D:6:2 gives the binary form 000010, D:-6:2 gives 101111 and ~D:-6:2 gives 010000.&lt;br /&gt;
&lt;br /&gt;
It was explained in 1.4 that binary forms have values, although bit sequences do not. With D = 244 the values of these three binary forms are ~D:6:2 = 2, D:-6:2 = 47 and ~D:-6:2 = 16.&lt;br /&gt;
&lt;br /&gt;
There are still more subtleties to be aware of. Each element can be any type of primary item, a primary item being a name, a number or an expression, provided that the second and third elements evaluate to non-negative integers. Expressions can be recognised as they are enclosed in parentheses but they can themselves contain bitfields. When a bitfield occurs in an expression, its value is the value of the binary form to which it translates, not the binary form itself. So F:D is a valid bitfield whose binary form consists of the D least significant bits of the value of F. It is not valid to take D = -4 and expect this to be the same as F:-4, since the prefix &amp;quot;-&amp;quot; in F:-4 is part of the IRP syntax, not of the value of the second element. But F:-D with D = 4 is valid, and does mean F:-4. If A = 7 then F:A:2 means F:7:2 but F:(A:2) means F:3, since A = 111 in binary notation so A:2 is the binary form 11 and the expression (A:2) evaluates to 3.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;bitfield = [&amp;quot;~&amp;quot;], primary item, &amp;quot;:&amp;quot;, ([&amp;quot;-&amp;quot;], primary item, [&amp;quot;:&amp;quot;, primary&lt;br /&gt;
item] | &amp;quot;:&amp;quot;, primary item);&lt;br /&gt;
primary item = name | number | expression;&lt;br /&gt;
(* The different types of primary item can be distinguished by their first&lt;br /&gt;
character as follows: digit =&amp;gt; unsigned integer, capital letter =&amp;gt; name,&lt;br /&gt;
&amp;quot;(&amp;quot; =&amp;gt; expression. *)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
Each type of primary item evaluates to an integer value. A bitfield evaluates to a binary form, an integer value expressed in binary notation with a fixed finite or infinite bit length in which negative integers are expressed in 1&#039;s complement notation. The value of the bitfield a:b:c, where the integer a and nonnegative integers b and c are the values of the primary items, is determined as follows:&lt;br /&gt;
*express a in its binary representation, conceptually padded on the left with an infinite number of 0&#039;s or 1&#039;s as appropriate, negative values being expressed in the usual 1&#039;s complement form;&lt;br /&gt;
*delete the c least significant bits;&lt;br /&gt;
*if b is present take the next b least significant bits and discard the rest, otherwise b is absent and nothing is discarded, the binary form is the conceptually infinite form that remains.&lt;br /&gt;
&lt;br /&gt;
The value of a:b is the same as a:b:0. In the general case where either or both of the permitted prefixes are present then apply the following further steps:&lt;br /&gt;
*if the first item in the bitfield has the prefix &amp;quot;~&amp;quot; then complement each bit in the sequence, i.e. replace 1&#039;s by 0&#039;s and 0&#039;s by 1&#039;s;&lt;br /&gt;
*if the second item in the bitfield has the prefix &amp;quot;-&amp;quot; then reverse the order of the sequence.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;-&amp;quot; prefix is not permitted unless b is present. If either b or c is negative then the bitfield is invalid. In the execution process, a bitfield is a translation object that translates the value a to a binary form.&lt;br /&gt;
&lt;br /&gt;
==IRstreams==&lt;br /&gt;
===Description===&lt;br /&gt;
As seen in 1.6, the detail of an IR protocol is carried in an IRstream but that is not the only role of&lt;br /&gt;
IRstreams, as will be seen in section 7. An IRstream consists of a list of items that represents an order for&lt;br /&gt;
transmission, together with an optional marker that describes whether and how those items are to be&lt;br /&gt;
repeated in the transmission. Each item ultimately translates to a duration or a sequence of durations.&lt;br /&gt;
IRstreams can be nested but the outer one, the IRstream section described in 1.6, translates to the&lt;br /&gt;
sequence of durations that describes the entire signal.&lt;br /&gt;
&lt;br /&gt;
Each item in the list is one of the following:&lt;br /&gt;
*Duration&lt;br /&gt;
*Extent&lt;br /&gt;
*Assignment&lt;br /&gt;
*Variation&lt;br /&gt;
*Bitfield&lt;br /&gt;
*IRstream&lt;br /&gt;
*Bitspec followed by IRstream&lt;br /&gt;
&lt;br /&gt;
The notation for an IRstream is that the items are separated by commas, the list is enclosed in parentheses and optionally followed by a repeat marker. Repeat markers are the subject of section 8 below.&lt;br /&gt;
&lt;br /&gt;
Items that are durations need no translation. Extents are translated into durations in accordance with&lt;br /&gt;
section 4, the scope of an extent being all items from the start of the IRstream to the extent itself.&lt;br /&gt;
Assignments do not themselves translate to durations, instead they change the values bound to names in&lt;br /&gt;
the global environment. Variations are alternative sections of the IRstream in which the active alternative&lt;br /&gt;
may vary as the IRstream is repeated in accordance with its repeat marker. Durations and extents have&lt;br /&gt;
been described in previous sections, assignments and variations are described in sections 11 and 12 The&lt;br /&gt;
scope rule for an extent is handled automatically by the execution model of section 14.&lt;br /&gt;
&lt;br /&gt;
Bitspecs also have a specific scope. Every bitspec is always followed by an IRstream, but not necessarily conversely. As the list of item types shows, an IRstream can contain other IRstreams that do not have preceding bitspecs. The scope of a bitspec is the whole of the IRstream that follows it but excluding the scopes of any bitspecs that this IRstream contains.&lt;br /&gt;
&lt;br /&gt;
A bitfield is processed as follows. Its primary items (names, numbers and expressions) are evaluated in the context of the global environment. The bitfield is then evaluated as a binary form as described in 5.3. The sequencing rule determined by the GeneralSpec in accordance with 2.3 is then applied to translate the binary form into a bit sequence. Adjacent bit sequences are concatenated and then processed further in accordance with the currently active bitspec, i.e. the one in whose scope they lie. This is described in section 7 below.&lt;br /&gt;
&lt;br /&gt;
During execution the processing of an IRstream is performed in left to right order, i.e. in the order of its&lt;br /&gt;
items for transmission. This is significant as assignments may change the values bound to names in the&lt;br /&gt;
global environment, so that subsequent items are processed in the context of the changed environment.&lt;br /&gt;
When this sequential processing reaches an item that is itself an IRstream, processing of the current&lt;br /&gt;
IRstream is suspended and that of the new one commenced. When the processing of this new IRstream is&lt;br /&gt;
completed, that of the previous one is resumed. In the execution model of section 14, this is handled&lt;br /&gt;
through a last in, first out (LIFO) IRstream stack. When the sequential processing reaches an item that is&lt;br /&gt;
a bitspec, this becomes the currently active bitspec. When processing of the IRstream that follows this&lt;br /&gt;
bitspec is completed, the bitspec that was formerly active is restored as the current one. In the execution&lt;br /&gt;
model of section 14, this is handled through a LIFO bitstream stack.&lt;br /&gt;
&lt;br /&gt;
As a simple example of an IRstream, consider the following one that occurs in the Dish Network:&lt;br /&gt;
&amp;lt;pre&amp;gt;(F:-6,U:5,D:5,1,-15).&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this protocol the sequencing rule is lsb. Suppose F=13, U=3, D = 25. In binary notation these values are F = 1101, U = 11, D = 11001. Pad these to the lengths specified in the bitfields to give F = 001101, U = 00011, D = 11001. Take account of the &amp;quot;-&amp;quot; prefix in F:-6 to give the binary forms&lt;br /&gt;
&amp;lt;pre&amp;gt;F:-6 = 101100, U:5 = 00011, D:5 = 11001.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As the sequencing rule is lsb, these translate separately to the bit sequences&lt;br /&gt;
&lt;br /&gt;
0 0 1 1 0 1, 1 1 0 0 0, 1 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
where the bits have been spaced out to distinguish them from binary forms. As these are adjacent in the IRstream they are concatenated into the single bit sequence&lt;br /&gt;
&lt;br /&gt;
0 0 1 1 0 1 1 1 0 0 0 1 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
for further processing by the active bitspec.&lt;br /&gt;
&lt;br /&gt;
There is now no demarcation in the bit sequence to show where the bits from the different external values&lt;br /&gt;
start and end. This comes into its own if the bitspec translates bits in groups rather than individually, a&lt;br /&gt;
possibility that will be seen in section 7. In the Dish Network protocol they actually are translated&lt;br /&gt;
individually, but suppose for the sake of this example that they are translated in groups of four, as actually happens in the XMP protocol. This grouping would be&lt;br /&gt;
&lt;br /&gt;
0 0 1 1, 0 1 1 1, 0 0 0 1, 0 0 1 1&lt;br /&gt;
&lt;br /&gt;
which is very different from that resulting from the binary forms. The bits comprising the second of these groups are actually the two least significant bits of F in msb order, followed by the two least significant bits of U in lsb order, but this group would be processed by the bitspec as a single entity. In a similar way both U and D contribute to the third group. As a result there would be no part of the IR signal that could be said to be the encoding of any of F, U or D. These separate values can be recovered from the signal only in the context of the protocol specification that was used to translate and encode them.&lt;br /&gt;
&lt;br /&gt;
The concatenation of bit sequences and the subsequent re-grouping for processing by a bitspec is handled in the execution model by means of a first in, first out (FIFO) bit buffer. Each bitspec has its own such buffer for the bits it is to process.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;irstream = &amp;quot;(&amp;quot;, bare irstream, &amp;quot;)&amp;quot;, [repeat marker];&lt;br /&gt;
bare irstream = | irstream item, [&amp;quot;,&amp;quot;, bare irstream -];&lt;br /&gt;
(* This allows a bare irstream to be empty but the bare irstream in the&lt;br /&gt;
second alternative cannot be empty. This is the significance of the&lt;br /&gt;
minus sign, which is the EBNF exception symbol. What is excluded by&lt;br /&gt;
the exception is what follows it, which in this case is empty. *)&lt;br /&gt;
irstream item = duration | extent | assignment | variation | bitfield |&lt;br /&gt;
irstream | bitspec, irstream;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The items of a bare irstream are processed sequentially from left to right, each in accordance with its own semantics. In the case of a bitfield there is a further processing stage. Processing of a bitfield yields a binary form. This is then translated to a bit sequence in accordance with the global sequencing rule.&lt;br /&gt;
&lt;br /&gt;
The permitted item types include extent and bitspec, each of which requires its scope to be specified in any context in which it can be used. Within an irstream the scope of a bitspec is every item in the following irstream except for items of the form &amp;quot;bitspec, irstream&amp;quot;, where the scope includes the bitspec but not the irstream. The scope of an extent is every item that precedes it in that irstream.&lt;br /&gt;
&lt;br /&gt;
==Bitspecs==&lt;br /&gt;
===Description===&lt;br /&gt;
A bitspec specifies a rule for translating a bit sequence into a bare IRstream, i.e. an IRstream without its enclosing parentheses and any following repeat marker. In effect, this bare IRstream simply replaces the bit sequence to create a new IRstream. The details of this process are given below.&lt;br /&gt;
&lt;br /&gt;
The action of a bitspec is not restricted to a specific bit sequence. Instead it is a general rule that has a well-defined scope specified in 6.1 and which applies to any bit sequence in its scope.&lt;br /&gt;
&lt;br /&gt;
The rule usually translates each bit separately but it may translate bit pairs or bit quadruples, or indeed bits taken in groups of any size but only groups of 1, 2 or 4 bits have yet been seen in real protocols. The rule is defined simply by giving the bare IRstream corresponding to every possible combination of 0&#039;s and 1&#039;s in a group of the appropriate size.&lt;br /&gt;
&lt;br /&gt;
For a bitspec that translates bits in groups of n, the number of possible combinations is 2 to the power n.&lt;br /&gt;
The corresponding sequences of bare IRstreams are listed in the order of the bit sequences given by the&lt;br /&gt;
bitfields&lt;br /&gt;
&lt;br /&gt;
0:n, 1:n, 2:n, 3:n, ... (n-1):n.&lt;br /&gt;
&lt;br /&gt;
These bitfields are translated to bit sequences as if they were themselves IRstream items, so this is a twostep&lt;br /&gt;
process. First they are translated to n-bit binary forms and then the global sequencing rule is applied&lt;br /&gt;
to further translate them to bit sequences. If the sequencing rule is &amp;quot;msb&amp;quot; and n = 3 then this order is&lt;br /&gt;
&lt;br /&gt;
0 0 0, 0 0 1, 0 1 0, 0 1 1, 1 0 0, 1 0 1, 1 1 0, 1 1 1&lt;br /&gt;
&lt;br /&gt;
but if the sequencing rule is &amp;quot;lsb&amp;quot; then the order is&lt;br /&gt;
&lt;br /&gt;
0 0 0, 1 0 0, 0 1 0, 1 1 0, 0 0 1, 1 0 1, 0 1 1, 1 1 1.&lt;br /&gt;
&lt;br /&gt;
The notation for a bitspec is a list of the bare IRstreams separated by vertical bars &amp;quot;|&amp;quot; with the whole enclosed in diamond brackets (i.e. less-than and greater-than signs). The number of bare IRstreams does not have to be a power of two, but if it is not then it is treated as if this number were the next greater nonzero power of two and with the bare IRstreams for the later bit sequences being empty. It is not a syntax error as a bare irstream is permitted to be empty. The qualification &amp;quot;non-zero&amp;quot; permits, say, &amp;lt;1,-2&amp;gt; to be a valid bitspec for which n = 1, the bit 0 is mapped to the bare IRstream 1,-2 and the bit 1 is mapped to the empty bare IRstream.&lt;br /&gt;
&lt;br /&gt;
Some examples of bitspecs from real protocols are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;1,-1,1,-8|1,-10&amp;gt;, &amp;lt;-1,1|1,-1&amp;gt;, &amp;lt;1,-3.3m|1,-4.7m&amp;gt;, &amp;lt;-4,2|-3,1,-1,1|-2,1,-2,1|-1,1,-3,1&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
These illustrate the form that is by far the most common, in that the bare IRstreams are simply sequences of durations. Bitfields also occur in bitspecs within IRstreams for some real protocols. The IRP notation, however, permits any of the types of item listed in 6.1 as permitted in IRstreams and the execution model of section 14 can handle any such construction.&lt;br /&gt;
&lt;br /&gt;
The action of a bitspec in the execution process is as follows. Recall that adjacent bit sequences are concatenated, as described in 6.1, so this description applies to the resulting concatenated sequence. The bits of the bit sequence to be processed are taken in groups of the appropriate size starting from the beginning of the sequence. Each group is then translated into the corresponding bare IRstream. This will result in a series of consecutive bare IRstreams that are themselves concatenated into a single, larger, one. The overall effect is therefore to translate a bit sequence into a single bare IRstream. The execution process then processes this bare IRstream before returning to process the subsequent items of the original IRstream.&lt;br /&gt;
&lt;br /&gt;
In the general form of a bitspec the bare IRstream that it constructs may itself contain bitfields (which occurs in a number of real protocols) or even IRstreams possibly proceded by other bitspecs (which have not yet been seen in real protocols). In either case the whole process for the translation of bitfields to bare irstreams may be called recursively. This raises the question of which bitspec is used for such recursive processing. This is answered by the scope rule for bitspecs. As described in 6.1, when a bitspec is encountered within an IRstream, the scope of the new bitspec is the IRstream that follows it. The bare IRstreams within that new bitspec fall within the scope of the &amp;quot;old&amp;quot; bitspec that applies to the containing IRstream, and therefore it is this &amp;quot;old&amp;quot; bitspec that applies in recursive processing. The execution model of section 14 handles this through the bitspec stack that was mentioned in 6.1.&lt;br /&gt;
===Execution example 1: Zenith protocol===&lt;br /&gt;
As an introduction to the execution model of section 14, this subsection examines a simple but non-trivial example, the Zenith protocol, to see how the semantics described so far can be modelled in terms of stacks and buffers. The protocol is&lt;br /&gt;
&lt;br /&gt;
{40k,520}&amp;lt;1,-1,1,-8|1,-10&amp;gt;( S:1,&amp;lt;1:2|2:2&amp;gt;(F:D),-90m )+&lt;br /&gt;
&lt;br /&gt;
where the plus sign is a repeat marker that will be explained in 8.1.&lt;br /&gt;
&lt;br /&gt;
Suppose that D = 4, S = 1 and F = 43. The first item to be processed is the outer bitspec. This gets pushed on the bitspec stack and becomes the currently active one. The next one is the outer IRstream, which first gets pushed on the irstream stack and then its contents is processed.&lt;br /&gt;
&lt;br /&gt;
This processing begins with the bitfield S:1, which now is 1:1 and which translates to the trivial bit sequence 1. The currently active bitspec translates this to the bare IRstream&lt;br /&gt;
&lt;br /&gt;
1,-10&lt;br /&gt;
&lt;br /&gt;
which in the execution model is then transmitted as the start of the signal.&lt;br /&gt;
&lt;br /&gt;
The execution process then meets the inner bitspec, which is pushed on the bitspec stack and becomes the currently active one. The following IRstream is pushed on the IRstream stack and flagged as having a preceding bitspec.&lt;br /&gt;
&lt;br /&gt;
The contents of this inner IRstream is now processed. It has one item, the bitfield F:D. The binary representation of F is 101011, so as a binary form F:D = 1011. The sequencing rule is lsb, so the bit sequence is 1 1 0 1. This is pushed into the buffer for the active (inner) bitspec, but as there are no more items in the IRstream then the next step is to process this buffer with the bitspec to which is belongs.&lt;br /&gt;
&lt;br /&gt;
The first stage in processing the buffer is to make the previous bitspec (the outer one) be the active one by decrementing the stack pointer. The bits are pulled and processed (FIFO) one at a time, the order being 1 1 0 1. The first bit gets mapped to the bitfield 2:2, translated to the binary form 10 and then, since the sequencing rule is lsb, to the bit sequence 0 1. This is pushed into the buffer of the currently active bitspec, which is now the outer one. Note that two buffers are now in current use.&lt;br /&gt;
&lt;br /&gt;
The remaining three bits of the buffer being processed are pulled, mapped and processed similarly; in general this continues until either the buffer is empty or processing of the bare IRstream resulting from the mapping meets something other than a bitfield. This is the way the concatenation of bit sequences is handled. When either of these happen then the buffer is processed. In the present case this continues until the buffer being processed is empty and the buffer of the current (outer) bitspec contains&lt;br /&gt;
&lt;br /&gt;
0 1 0 1 1 0 0 1.&lt;br /&gt;
&lt;br /&gt;
This buffer is now processed by its bitspec. The bitspec stack pointer is again decremented, which means that there is now no current bitspec. So if a bitfield was encountered it would be an error, but that does not happen here as each of these bits is mapped to a sequence of durations by the outer bitspec according to the mapping.&lt;br /&gt;
&lt;br /&gt;
0 -&amp;gt; 1,-1,1,-8 1 -&amp;gt; 1,-10.&lt;br /&gt;
&lt;br /&gt;
In the execution model these are transmitted as they are encountered. When this has been done and this buffer is empty, the previous active bitspec, the outer one, is again made current by incrementing the bitspec stack pointer. Its buffer is now empty so the bitspec stack pointer is incremented once again to make the inner bitspec be active.&lt;br /&gt;
&lt;br /&gt;
Processing of the inner IRstream now resumes, with the item after F:D. But the end of this IRstream has been reached, so its processing has been completed, together with that of its preceding bitspec since its scope was just this IRstream. As the IRstream was flagged has having a preceding bitspec, that bitspec is pulled from the stack, once again making the outer bitspec be active. The completed (inner) IRstream is also pulled from its stack and processing resumes of the outer IRstream.&lt;br /&gt;
&lt;br /&gt;
There is only one item left, the lead-out gap -90m. Execution waits for this time and then continues with the next execution of the (outer) IRstream in accordance with the repeat marker.&lt;br /&gt;
&lt;br /&gt;
===Execution example 2: Proton protocol===&lt;br /&gt;
Extents do not occur in the Zenith protocol, but a real example in which they do occur is the Proton protocol. This protocol is&lt;br /&gt;
&lt;br /&gt;
{38k,500}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,1,-8,F:8,1,^63m)+&lt;br /&gt;
&lt;br /&gt;
where again the plus sign is a repeat marker.&lt;br /&gt;
To handle extents in the execution model, when each IRstream is pushed on the stack its start time is recorded. If an extent is encountered while processing that IRstream, execution adds its time period to the start time and waits until that is the current time. In this way both the scope of the extent and its conversion to a gap duration get incorporated simply into the model.&lt;br /&gt;
&lt;br /&gt;
Suppose the values of the device code D and function code (OBC) F are D = 34, F = 19. There are no nested IRstreams or bitspecs so processing is straightforward. The bitspec is pushed on the bitspec stack, the IRstream on the IRstream stack and the start time is recorded, say T. The initial durations 16, -8 are converted to a flash and gap and transmitted as the start of the signal. Since in binary notation D = 100010 and the sequencing rule is lsb, the bitfield D:8 translates to the bit sequence&lt;br /&gt;
&lt;br /&gt;
0 1 0 0 0 1 0 0&lt;br /&gt;
&lt;br /&gt;
This is pushed into the buffer of the bitspec but is immediately processed since the next item in the bare IRstream is a duration, not a bitfield. The bitspec shows that the bits are translated to duration sequences one at a time, with the correspondence&lt;br /&gt;
&lt;br /&gt;
0 -&amp;gt; 1,-1 1 -&amp;gt; 1,-3.&lt;br /&gt;
&lt;br /&gt;
The corresponding flashes and gaps are sent as the next part of the signal, followed by those for the two durations 1, -8 that are next in the bare IRstream. The bitfield F:8 translates to the bit sequence&lt;br /&gt;
&lt;br /&gt;
1 1 0 0 1 0 0 0&lt;br /&gt;
&lt;br /&gt;
which is mapped to durations just as for D:8 and sent next since it is followed by another duration, value 1, which follows these as a flash.&lt;br /&gt;
&lt;br /&gt;
At this point the time taken by the flashes and gaps already transmitted totals 76 units. The unit is that specified by the GeneralSpec, namely 500μs, so 76 units is 38 milliseconds. The real-time clock that read T at the start of the processing of this IRstream therefore now reads T+38 milliseconds. The extent value is 63 milliseconds so the execution model waits until the current time is T+63 milliseconds before it performs the next action (which would be a repeat execution of the IRstream). This is a gap of 25 milliseconds, in agreement with the extent syntax of subtracting the total length (38 milliseconds) of the preceding durations in the IRstream from the time period (63 milliseconds) of the extent and treating the extent as a gap duration with the value of that time difference.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;bitspec = &amp;quot;&amp;lt;&amp;quot;, bare irstream, {&amp;quot;|&amp;quot;, bare irstream}, &amp;quot;&amp;gt;&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A bitspec is always followed by an irstream. It acts on the contents of that irstream after any bitfield items within the scope of the bitspec have been translated into bit sequences in accordance with 6.3 and any consecutive bit sequences so produced have been concatenated. Its action is to translate such concatenated bit sequences into bare irstreams.&lt;br /&gt;
&lt;br /&gt;
A bitfield itself defines a mapping of time-ordered bit sequences to bare irstreams. If the number of bare irstreams in the bitspec is 2 to the power n then these correspond, in their order of occurrence in the bitspec, to the bit sequences given by the bitfields 0:n, 1:n, 2:n, 3:n, ... (n-1):n. These bitfields are translated into time ordered bit sequences in the context of the global sequencing rule.&lt;br /&gt;
&lt;br /&gt;
If the number of bare irstreams in the bitspec is not a power of 2 then n is taken as the power in the next greater non-zero power of two and the correspondence between bit sequences and bare irstreams is made in left to right order until the bare irstreams are exhausted. The remaining bit sequences are taken as mapped to empty bare irstreams.&lt;br /&gt;
&lt;br /&gt;
The action of a bitfield on a fully concatenated bit sequence is given by taking its bits in groups of n in their time-sequence order starting from the earliest bit and concatenating the bare irstreams that result from mapping each such group. If the number of bits in the bit sequence is not a multiple of n then it is a semantic error.&lt;br /&gt;
&lt;br /&gt;
==Repeat markers==&lt;br /&gt;
===Description===&lt;br /&gt;
A repeat marker is an optional element of an IRstream, as described in 6.1, that specifies whether and how execution of that IRstream is to be repeated. The possible repeat markers are:&lt;br /&gt;
*&amp;quot;*&amp;quot; which indicates zero or more times;&lt;br /&gt;
*&amp;quot;+&amp;quot; which indicates one or more times;&lt;br /&gt;
*a number, e.g &amp;quot;3&amp;quot;, which indicates that number of times;&lt;br /&gt;
*a number followed by &amp;quot;+&amp;quot;, which indicates at least that number of times.&lt;br /&gt;
&lt;br /&gt;
So &amp;quot;*&amp;quot; is equivalent to &amp;quot;0+&amp;quot; and &amp;quot;+&amp;quot; to &amp;quot;1+&amp;quot;. Assignments and variations in an IRstream may mean that the repeat executions may not all produce the same signal. For repeat markers that specify only a minimum number of repeats, repeats continue beyond the minimum number for as long as the button on the remote is held down, or for one more repeat beyond this if so determined by a variation in accordance with section 12 below. In the execution model of section 14 the remote is a conceptual one.&lt;br /&gt;
&lt;br /&gt;
A simple example is the Dish Network protocol whose inner IRstream was considered in 6.1 In full the protocol is&lt;br /&gt;
&lt;br /&gt;
{57.6k,400}&amp;lt;1,-7|1,-4&amp;gt;(1,-15,(F:-6,U:5,D:5,1,-15)+)&lt;br /&gt;
&lt;br /&gt;
The initial durations 1, -15 are sent only once but the following inner IRstream is sent for as long as the button is held down, but at least once. All repeats are identical, since the inner IRstream contains no assignments or variations.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;repeat marker = &amp;quot;*&amp;quot; | &amp;quot;+&amp;quot; | number, [&amp;quot;+&amp;quot;];&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A repeat marker following an IRstream specifies whether and how execution of that IRstream is to be repeated. The number of repetitions is determined by the repeat marker as follows: &amp;quot;*&amp;quot; signifies that the IRstream is executed zero or more times, &amp;quot;+&amp;quot; signifies one or more times, a number signifies that many times and a number followed by &amp;quot;+&amp;quot; signifies at least that many times. For repeat markers that specify only a minimum number of times of execution, repeats continue beyond the minimum number for as long as the button on the remote is held down, or for one more repeat beyond this if so determined by the semantics of a variation, in accordance with 12.3 below.&lt;br /&gt;
&lt;br /&gt;
==Expressions==&lt;br /&gt;
===Description===&lt;br /&gt;
An expression signifies a value that is derived from other values by calculation. It consists of names, numbers and bitfields connected by standard symbols for arithmetic and logical operations, the whole being enclosed in parentheses. Bitfields in expressions evaluate to the value of the binary form to which they translate, as described in 1.4, rather than the binary form itself.&lt;br /&gt;
&lt;br /&gt;
Operators have their usual order of precedence and parentheses may be used inside an expression to change the order of precedence by grouping. The permitted operators and rules for evaluation are described in 9.3 below for completeness. Since numbers in IRP notation are purely sequences of digits, explicit negative values have to be represented by an expression in which the operator is the unary minus sign, e.g. (-12).&lt;br /&gt;
&lt;br /&gt;
In the execution model, names that occur in an expression take the values that are bound to them in the global environment at the time that the expression is evaluated. The significance of this is that assignments within an IRstream can change the bindings during the course of execution. A simple example of the use of an expression is provided by the Panasonic protocol&lt;br /&gt;
&lt;br /&gt;
{37k,432}&amp;lt;1,-1|1,-3&amp;gt;(8,-4, 2:8,32:8,D:8,S:8,F:8,(D^S^F):8,1,-173)+&lt;br /&gt;
&lt;br /&gt;
in which (D^S^F) is an element of a bitfield and denotes the bitwise exclusive-or of the values of the device code D, subdevice code S and function code F.&lt;br /&gt;
&lt;br /&gt;
When a colon appears in an expression, it is a separator in a bitfield. A minus sign that follows a colon is a prefix to the second primary item of a bitfield, as described in 5.1. A minus sign that is not preceded by a primary item must be a unary minus or a syntactic error. All other minus signs are binary operators, again unless they are a syntactic error. Note that a minus sign following a bitfield is preceded by a primary item, namely the final primary item of the bitfield.&lt;br /&gt;
&lt;br /&gt;
Some examples of unusual but valid expressions are:&lt;br /&gt;
*(~A:-B:C), the value of the bitfield ~A:-B:C&lt;br /&gt;
*(-A:-B:C), unary minus followed by the bitfield A:-B:C&lt;br /&gt;
*(A - - 1), binary minus followed by unary minus, equivalent to (A + 1)&lt;br /&gt;
*(A:B-C:D), difference of the values of the bitfields A:B and C:D&lt;br /&gt;
*(A:(B-C):D), value of a single bitfield with the expression (B-C) as middle primary item&lt;br /&gt;
*(A:(B-C:D)), value of a bitfield whose second primary item is the difference of B and the value of the bitfield C:D.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;expression = &amp;quot;(&amp;quot;, bare expression, &amp;quot;)&amp;quot;;&lt;br /&gt;
bare expression = inclusive or expression;&lt;br /&gt;
inclusive or expression = [inclusive or expression, &amp;quot;|&amp;quot;], exclusive or&lt;br /&gt;
expression;&lt;br /&gt;
exclusive or expression = [exclusive or expression, &amp;quot;^&amp;quot;], and expression;&lt;br /&gt;
and expression = [and expression, &amp;quot;&amp;amp;&amp;quot;], additive expression;&lt;br /&gt;
additive expression = [additive expression, (&amp;quot;+&amp;quot; | &amp;quot;-&amp;quot;)], multiplicative&lt;br /&gt;
expression;&lt;br /&gt;
multiplicative expression = [multiplicative expression, (&amp;quot;*&amp;quot; | &amp;quot;/&amp;quot; | &amp;quot;%&amp;quot;)],&lt;br /&gt;
exponential expression;&lt;br /&gt;
exponential expression = [exponential expression, &amp;quot;**&amp;quot;], unary expression;&lt;br /&gt;
unary expression = [&amp;quot;-&amp;quot;], (primary item | bitfield);&amp;lt;/pre&amp;gt;&lt;br /&gt;
(* &amp;quot;primary item&amp;quot; is defined in 5.2 above *)&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
An expression is a type of primary item that determines an integer value through arithmetic and logical operations performed on the values of primary items or bitfields. Within an expression the value of a bitfield is given by translating it into a binary form in accordance with 5.3 and then taking the value of that binary form considered as an integer in binary notation. This value will be a non-negative integer unless the binary form is of infinite length with all leading bits beyond a cartain point being ones, in which case it is interpreted as a negative integer in 1&#039;s complement form.&lt;br /&gt;
&lt;br /&gt;
The binary operations &amp;quot;+&amp;quot;, &amp;quot;-&amp;quot;, &amp;quot;*&amp;quot;, &amp;quot;/&amp;quot; denote the arithmetic operations of addition, subtraction, multiplication and division of integers and &amp;quot;%&amp;quot; denotes the modulo (remainder) operation. The division and modulo operations a/b and a%b are only defined when b is nonzero and they are defined such that the inequalities and equation&lt;br /&gt;
&lt;br /&gt;
0 &amp;lt;= a%b &amp;lt; abs(b), a = (a/b)*b + a%b&lt;br /&gt;
&lt;br /&gt;
are always true, where abs denotes absolute value. This means that in all cases, a/b is the greatest integer that is not greater than the algebraic quotient.&lt;br /&gt;
&lt;br /&gt;
The binary operation &amp;quot;**&amp;quot; denotes exponentiation, i.e. a**b denotes a raised to the power b. The unary operation &amp;quot;-&amp;quot; denotes change of sign, i.e. multiplication by -1.&lt;br /&gt;
&lt;br /&gt;
The operations &amp;quot;&amp;amp;&amp;quot;, &amp;quot;|&amp;quot;, &amp;quot;^&amp;quot; denote the logical operations AND, OR and EXCLUSIVE OR performed bitwise on the binary representations of the values of the operands, where the binary representation of a negative integer is its usual 1&#039;s complement form (but with a potentially infinite number of bits, i.e. with enough bits such that using more bits does not give a different answer). As examples:&lt;br /&gt;
&lt;br /&gt;
(-4)^1 = -5, (-4)^(-1) = 3.&lt;br /&gt;
&lt;br /&gt;
:Note: John Fine&#039;s original postings say explicitly that he wants to keep the C and C++ shift operators &amp;quot;&amp;gt;&amp;gt;&amp;quot; and &amp;quot;&amp;lt;&amp;lt;&amp;quot; out of the expression syntax. He points out that X&amp;lt;&amp;lt;3 is equivalent to X*8 and X&amp;gt;&amp;gt;3 to the bitfield X::3. With integer division as defined above, X&amp;gt;&amp;gt;3 is also equivalent to X/8, a better parallel with X*8, regardless of whether X is positive or negative.&lt;br /&gt;
&lt;br /&gt;
:John does not otherwise say what operators should be allowed in expressions but the above seems a reasonable list judging by his examples. I have included exponentiation as it permits an equivalent of a variable shift, since X&amp;lt;&amp;lt;Y and X&amp;gt;&amp;gt;Y are equivalent to X*2**Y and X/2**Y (as &amp;quot;**&amp;quot; has a higher precedence than &amp;quot;*&amp;quot; and &amp;quot;/&amp;quot;). The bitfield X::Y can be used instead of X&amp;gt;&amp;gt;Y but there is no other equivalent of X&amp;lt;&amp;lt;Y.&lt;br /&gt;
&lt;br /&gt;
Evaluation of expressions should be performed in steps with each step being the action of the appropriate binary operator on two values (or the unary minus on one value) in accordance with the parsing syntax. This ensures correct operator precedence since the precedence of the operators, and left-to-right evaluation of expressions such as (x - y - z) that have multiple operators of equal precedence, is incorporated into the formal syntax. For reference, the order of precedence is the usual one. In&lt;br /&gt;
decreasing order it is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unary -&lt;br /&gt;
**&lt;br /&gt;
*, /, %&lt;br /&gt;
+, -&lt;br /&gt;
&amp;amp;&lt;br /&gt;
^&lt;br /&gt;
|&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is only one environment in IRP notation, the global environment, but assignments may change the&lt;br /&gt;
value assigned to a name during the course of execution of the protocol. Expressions are evaluated in the&lt;br /&gt;
context of the environment as it is at the point of execution of the expression in the execution model.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
===10.1 Description===&lt;br /&gt;
Definitions occur only in the Definitions section of a protocol, which consists of a list of individual definitions separated by commas and enclosed in curly brackets. A definition uses an equals sign to bind a bare expression, i.e. an expression without the enclosing parentheses, to a name as a shorthand form that can be used elsewhere in the protocol, including in other definitions. A definition is never evaluated as such. In the execution process its expression is evaluated at the time that the name is evaluated, in the context of the global environment at that time.&lt;br /&gt;
&lt;br /&gt;
Definitions are commonly used to express the calculation of a checksum. A simple example is the Somfy protocol:&lt;br /&gt;
&lt;br /&gt;
{35.7k}&amp;lt;308,-881|669,-520&amp;gt;(2072,-484,F:2,D:3,C:4,-2300)+{C=F*4+D+3}&lt;br /&gt;
&lt;br /&gt;
The plus sign before the definitions section is the repeat marker for the preceding IRstream. This is equivalent to&lt;br /&gt;
&lt;br /&gt;
{35.7k}&amp;lt;308,-881|669,-520&amp;gt;(2072,-484,F:2,D:3,(F*4+D+3):4,-2300)+&lt;br /&gt;
&lt;br /&gt;
A somewhat more complicated example is the DirecTV protocol:&lt;br /&gt;
&lt;br /&gt;
{38k,600,msb}&amp;lt;1,-1|1,-2|2,-1|2,-2&amp;gt;(5,(5,-2,D:4,F:8,C:4,1,-50)+) {C=7*(F:2:6)+5*(F:2:4)&lt;br /&gt;
+3*(F:2:2)+(F:2)}&lt;br /&gt;
&lt;br /&gt;
This also shows the use of bitfields in expressions. Enclosing the bitfields in parentheses, as here, is an aid to readability but it is not required by the syntax, which is valid and unambiguous if the parentheses are removed. The Somfy protocol remains easily understood when the expression is substituted for the defined name. The expression is sufficiently complicated in the DirecTV protocol that it would become unwieldy to express the protocol without the use of a definition for the checksum.&lt;br /&gt;
&lt;br /&gt;
Whenever the name occurs as a primary item, as does the C in the IRstream of this example, the expression (with its enclosing parentheses) could be substituted for the defined name so the definition is merely a convenience. One case, however, where a definition provides the only way of using an expression is in a duration or extent. Durations and extents both allow the use of names or numbers but not expressions, so to use an expression it must be bound to a name and that name used in its place.&lt;br /&gt;
&lt;br /&gt;
The definitions list in the Definitions section is read and executed from left to right. This is significant only if two different bare expressions are assigned to the same name. There is no valid reason to do so, but this rule eliminates the ambiguity of which one takes precedence. The right-most one takes precedence as the execution of a definition will supersede any existing binding of the defined name.&lt;br /&gt;
&lt;br /&gt;
Definitions must not be self-referential, either directly or indirectly, as this leads to infinite recursion in the processing of definitions in the execution model. Two examples in which this happens are&lt;br /&gt;
&lt;br /&gt;
{X=F+X} and {X=F+Y, Y=X+D}&lt;br /&gt;
&lt;br /&gt;
The problem it causes is easily seen by repeatedly substituting the corresponding expression for each defined name, as discussed above. Neither the syntax nor the execution model prevents this error, but it would lead to an infinite loop during execution. This is an issue for the protocol writer, just as any programming language can give rise to infinite loops in a badly written program.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;definitions = &amp;quot;{&amp;quot;, definitions list, &amp;quot;}&amp;quot;;&lt;br /&gt;
definitions list = | definition, [&amp;quot;,&amp;quot;, definitions list - ];&lt;br /&gt;
(* This allows a definitions list to be empty but the definitions list in&lt;br /&gt;
the second alternative cannot be empty. This is the significance of the&lt;br /&gt;
minus sign, which is the EBNF exception symbol. What is excluded by&lt;br /&gt;
the exception is what follows it, which in this case is empty. *)&lt;br /&gt;
definition = name, &amp;quot;=&amp;quot;, bare expression;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The definitions in a definitions list are executed from left to right. Execution of a definition creates a binding in the global environment. It binds the name on the left of the equals sign to the bare expression on the right, superseding any existing binding of that name.&lt;br /&gt;
&lt;br /&gt;
==Assignments==&lt;br /&gt;
===Description===&lt;br /&gt;
Assignments, like definitions, change the binding of names during the course of execution of a protocol and they have exactly the same form. The distinction is that a definition binds a name to an unevaluated expression, an assignment binds it to the value of an expression. They are distinguished from one another by context. Assignments occur only within IRstreams, definitions only within the Definitions section of a protocol.&lt;br /&gt;
&lt;br /&gt;
When an assignment is executed, the bare expression is evaluated in the global environment as it is at that time. The resulting value is then bound to the name on the left of the assignment, so changing the environment. This makes an assignment such as&lt;br /&gt;
&lt;br /&gt;
T = T + 1&lt;br /&gt;
&lt;br /&gt;
valid. It increments the value bound to T. Because it is self-referential, this would not be valid as a definition.&lt;br /&gt;
&lt;br /&gt;
Assignments are often used in conjunction with definitions, such as to be able to use the same checksum formula in different circumstances within the same protocol. An example is the OrtekMCE protocol, which can be written as&lt;br /&gt;
&lt;br /&gt;
{38.6k,480}&amp;lt;1,-1|-1,1&amp;gt;((P=0,4,-1,D:5,P:2,F:6,C:4,-48m), (P=1,4,-1,D:5,P:2,F:6,C:4,-48m)+,&lt;br /&gt;
(P=2,4,-1,D:5,P:2,F:6,C:4,-48m){C=3+D:1+D:1:1+D:1:2+D:1:3+D:1:4+P:1+P:1:1+&lt;br /&gt;
F:1+F:1:1+F:1:2+F:1:3+F:1:4+F:1:5}&lt;br /&gt;
&lt;br /&gt;
The checksum C is three more than the sum of the binary digits in D, P and F together, or put more simply, is three more than the number of &amp;quot;1&amp;quot; bits in their values. It is quite a complicated expression and is used in each of the three IRstreams of the protocol. It can be considered, alternatively, as one IRstream in which the value of P is 0 on the first transmission, 1 on all others except the last one and 2 on the last transmission, which is sent after the button has been released. But it is not only P that changes, so also does the value of the checksum C since this involves P. The use of an assignment means that the value of P in the global environment changes in the course of execution of the protocol, and as C is recalculated from its defined expression each time it is referenced, the correct value is transmitted each time.&lt;br /&gt;
&lt;br /&gt;
Another use of assignments is to represent a toggle that keeps a fixed value throughout the signal from each button press but which toggles between one button press and the next. An example of this behaviour is the RC5 protocol:&lt;br /&gt;
&lt;br /&gt;
{36k,msb,889}&amp;lt;1,-1|-1,1&amp;gt;(T=T+1,(1:1,~F:1:6,T:1,D:5,F:6,^114m)+).&lt;br /&gt;
&lt;br /&gt;
Only two values are set by a button press, the device code D and function code F. The value of T is maintained by the remote control, incremented on each button press and used to generate the toggle bit T:1 in the IRstream. This is an example of persistence of the global environment, a concept that forms part of the execution model of section 14. The internal state of the remote changes when a button is pressed, and the new state persists until the next button press changes it again. This is modelled by having bindings in the global environment remain in existence until explicitly changed by the pressing of a button on the conceptual remote of the execution model. The value of T is unknown when the protocol is executed, but whatever it may be, it will be one greater on the next button press.&lt;br /&gt;
&lt;br /&gt;
As a final example of the use of assignments, consider the AirAsync protocol:&lt;br /&gt;
&lt;br /&gt;
(37.7k,840)&amp;lt;1|-1&amp;gt;(N=0,(1,B:8:N,-2,N=N+8)+)&lt;br /&gt;
&lt;br /&gt;
The value of N is 0 on the first transmission of the repeating IRstream but increases by 8 on each successive transmission. The bitfield B:8:N is therefore the least significant 8 bits on the first transmission, the next 8 on the next transmission, and so on. The sequencing rule is lsb, so the result is that the value of B is sent in lsb order, eight bits at a time, on successive repeats, however large may be the value of B. This protocol represents standard asynchronous transmission with one start bit, eight data bits and two stop bits.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;assignment = name, &amp;quot;=&amp;quot;, bare expression;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
When an assignment is executed, the bare expression is evaluated according to the current state of the global environment. The resulting value is then bound to the given name, so changing the environment.&lt;br /&gt;
&lt;br /&gt;
==Variations==&lt;br /&gt;
===Description===&lt;br /&gt;
The OrtekMCE protocol considered in 11.1 had an IRstream that varied systematically between its first&lt;br /&gt;
transmission, its last one and all others in between. The first one is sent on button down, the middle ones&lt;br /&gt;
while the button remains held down and the last one on button up. A number of other protocols share this&lt;br /&gt;
pattern, yet more share a pattern of variation between button down and button held but without a&lt;br /&gt;
transmission on button up.&lt;br /&gt;
&lt;br /&gt;
These patterns can be represented in IRP notation without the need for any new structure, as the example of the OrtekMCE protocol showed. When the protocol is written out in full in the form given in 11.1, it does however obscure the fact that the three different IRstreams are all small variations of one another. The use in IRstreams of a variation both simplifies the appearance of the protocol and clarifies this relationship between the various transmissions.&lt;br /&gt;
&lt;br /&gt;
A variation consists of two or three alternative bare IRstreams given together, each enclosed in square brackets as delimiters. Typically the bare IRstreams will consist only of a single item, but this is not required. On first transmission (button down) the first alternative is used, on middle transmissions (button held) the second alternative is used, and if a third alternative is present then on button up the IRstream is sent once more with the third alternative being used. The OrtekMCE protocol can therefore be written in the simpler form&lt;br /&gt;
&lt;br /&gt;
{38.6k,480}&amp;lt;1,-1|-1,1&amp;gt;([P=0][P=1][P=2],4,-1,D:5,P:2,F:6,C:4,-48m)+{C=3+D:1+D:1:1+&lt;br /&gt;
D:1:2+D:1:3+ D:1:4+P:1+P:1:1+F:1+F:1:1+F:1:2+F:1:3+F:1:4+F:1:5}&lt;br /&gt;
&lt;br /&gt;
A simpler example is the CanalSat protocol:&lt;br /&gt;
&lt;br /&gt;
{55.5k,250,msb}&amp;lt;-1,1|1,-1&amp;gt;([T=0][T=2],1:1,D:7,S:6,T:2,F:7,-89m)+&lt;br /&gt;
&lt;br /&gt;
Here there is no dependent checksum, the protocol could be written without the use of T as&lt;br /&gt;
&lt;br /&gt;
{55.5k,250,msb}&amp;lt;-1,1|1,-1&amp;gt;((1:1,D:7,S:6,0:2,F:7,-89m), (1:1,D:7,S:6,2:2,F:7,-89m)+)&lt;br /&gt;
&lt;br /&gt;
but use of a variation emphasises that there is only a small systematic difference between the first and subsequent frames.&lt;br /&gt;
&lt;br /&gt;
There are a few protocols in which one IRstream is transmitted on button down, a related one on button up, but nothing while the button is held. This typically corresponds to buttons of a mouse, where holding down a mouse button does nothing but there is an effect on button up. To meet this situation, an alternative with an empty IRstream signifies that the remainder of the IRstream should be skipped. An example is the variant of the Sejin protocol that corresponds to the buttons of a three-button mouse. This is:&lt;br /&gt;
&lt;br /&gt;
{38.8k,310,msb}&amp;lt;-1|1&amp;gt;(&amp;lt;8:4|4:4|2:4|1:4&amp;gt;([F=B][ ][F=0],3,3:2,(-D):6,B:2,0:16,E:4,C:4,-3600u)+)&lt;br /&gt;
{C=((-D):4:2+4*(-D):2+F+E)&amp;amp;15}&lt;br /&gt;
&lt;br /&gt;
In this, D is the device code but its negative is sent when the mouse part of the protocol is used. B numbers the buttons, 1,2 or 3. On button up the IRstream is sent with B=0, the same for all buttons as the button down part has shown which button is concerned. The checksum C is calculated with either the button number or 0 as appropriate. The middle alternative [ ] indicates that nothing is sent while the button is held.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;variation = 2*alternative, [alternative];&lt;br /&gt;
alternative = &amp;quot;[&amp;quot;, bare irstream, &amp;quot;]&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
A variation is a permitted type of irstream item that operates in conjunction with a repeat marker for the irstream that contains it. If the repeat marker specifies an indefinite number of times of execution with a given minimum then the state, held or released, of the button of the remote control affects the effect of the variation but this is not so if the number of repeats is definite.&lt;br /&gt;
&lt;br /&gt;
With a definite number in the repeat marker, on the first execution of the IRstream the bare IRstream of any first alternative is executed. If a variation is encountered with three alternatives then on the last execution of the IRstream, provided this is not also the first, that of the third alternative is executed. In all other cases that of the second alternative is executed.&lt;br /&gt;
&lt;br /&gt;
The same holds with an indefinite number in the repeat marker but an additional rule is required to determine the actual number of times that the IRstream is executed. The IRstream is repeatedly executed for as long as the button is held down at the start of an execution. Repeats also continue beyond that, if necessary, until all of the following are true:&lt;br /&gt;
*the minimum number given in the repeat marker has been performed;&lt;br /&gt;
*at the end of the last execution the button is no longer held;&lt;br /&gt;
*the successive executions satisfy the rule for a fixed number of repeats with that fixed number being the actual number.&lt;br /&gt;
&lt;br /&gt;
Note the implicit nature of these conditions. It is not possible to tell whether an execution is going to be the last one if the button was still held when it commenced, so if a variation with three alternatives is encountered, it may be necessary to perform one further execution after the button has been released in order to meet the third condition.&lt;br /&gt;
&lt;br /&gt;
If the bare irstream of an alternative is empty then its execution consists of skipping the remainder of the IRstream and proceeding to its next execution.&lt;br /&gt;
&lt;br /&gt;
==Names and numbers==&lt;br /&gt;
===Description===&lt;br /&gt;
For the sake of completeness, names and numbers are defined formally in this section. They were defined informally in 1.2. All that is needed to add here is that the presence of assignments or variations may mean that a name may not evaluate to the same value on each occasion that it is evaluated. A name bound to a value evaluates to the value that is bound to it in the global environment at the time that it is evaluated. A name bound to a bare expression is evaluated by evaluating that expression.&lt;br /&gt;
&lt;br /&gt;
===Formal syntax===&lt;br /&gt;
&amp;lt;pre&amp;gt;number = &amp;quot;0&amp;quot; | nonzero digit, {digit};&lt;br /&gt;
number with decimals = number, [&amp;quot;.&amp;quot;, digit, {digit} ];&lt;br /&gt;
digit = &amp;quot;0&amp;quot; | &amp;quot;1&amp;quot; | &amp;quot;2&amp;quot; | &amp;quot;3&amp;quot; | &amp;quot;4&amp;quot; | &amp;quot;5&amp;quot; | &amp;quot;6&amp;quot; | &amp;quot;7&amp;quot; | &amp;quot;8&amp;quot; | &amp;quot;9&amp;quot;;&lt;br /&gt;
nonzero digit = digit - &amp;quot;0&amp;quot;;&lt;br /&gt;
name = letter, {letter | digit};&lt;br /&gt;
letter = &amp;quot;A&amp;quot;|&amp;quot;B&amp;quot;|&amp;quot;C&amp;quot;|&amp;quot;D&amp;quot;|&amp;quot;E&amp;quot;|&amp;quot;F&amp;quot;|&amp;quot;G&amp;quot;|&amp;quot;H&amp;quot;|&amp;quot;I&amp;quot;|&amp;quot;J&amp;quot;|&amp;quot;K&amp;quot;|&amp;quot;L&amp;quot;|&amp;quot;M&amp;quot;|&amp;quot;N&amp;quot;|&amp;quot;O&amp;quot;|&amp;quot;P&amp;quot;&lt;br /&gt;
|&amp;quot;Q&amp;quot;|&amp;quot;R&amp;quot;|&amp;quot;S&amp;quot;|&amp;quot;T&amp;quot;|&amp;quot;U&amp;quot;|&amp;quot;V&amp;quot;|&amp;quot;W&amp;quot;|&amp;quot;X&amp;quot;|&amp;quot;Y&amp;quot;|&amp;quot;Z&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Semantics===&lt;br /&gt;
The value of a number is the non-negative integer represented by its sequence of digits in decimal notation.&lt;br /&gt;
&lt;br /&gt;
The value of a number with decimals is the non-negative real number represented by its sequence of digits and optional decimal point in decimal notation.&lt;br /&gt;
&lt;br /&gt;
The value of a name is the value bound to it at the time of evaluation, or is the result of evaluating the expression bound to it at that time, as the case may be.&lt;br /&gt;
&lt;br /&gt;
==Execution model==&lt;br /&gt;
===Introduction===&lt;br /&gt;
The level of recursion permitted in the IRP notation is sufficiently great that a formal execution model is needed to ensure a consistent interpretation of some of its more complex possibilities. This section provides such a model in a natural language formulation.&lt;br /&gt;
&lt;br /&gt;
The execution environment conceptually contains a timer and a carrier generator. All processes are considered as instantaneous other than TRANSMIT, which turns on the carrier generator for a specified time, and WAIT, which waits for a specified time. Processes are synchronous, so that any process that follows a TRANSMIT or WAIT is not performed until the TRANSMIT or WAIT is completed.&lt;br /&gt;
&lt;br /&gt;
The execution model has two aspects, static and dynamic. The static aspect describes such things as how expressions are interpreted and how bitfields are converted to binary forms. Collectively the operations of the static aspect are described as evaluation. They are performed by the operator EVALUATE. The dynamic aspect describes such things as how IRstreams are processed to produce the flashes and gaps of the signal. The dynamic procedures are performed by the operator PROCESS. Both aspects are covered by the semantics specified in the previous sections but this execution model puts them together to form a coherent whole.&lt;br /&gt;
&lt;br /&gt;
Processing is initiated by the pressing of a button on a conceptual remote control. The button press binds certain names to values in the global environment. These correspond to the Device Code and OBC or the like, the values that are set externally by means outside the scope of the IRP notation. Also set externally is the duty cycle of the carrier generator. This is typically 33% or thereabouts, but again it is outside the scope of the IRP notation. With these external processes performed, the button press initiates the procedure &amp;quot;PROCESS protocol&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The global environment is considered to have a continuing existence between button presses. The external process of binding names to values when a button is pressed changes the binding of those names but all other names are considered to have bound values as well, albeit possibly unknown values. This feature of the model permits names to be used that are neither bound to a value by a button press nor bound to an expression by a definition. This is the mechanism by which certain types of toggle can be represented. Some protocols have a toggle bit that alternates in value between successive button pressings, to enable successive presses of the same button to be distinguished from a single longer press. When a user picks up the remote and presses a button, the state of the toggle that will be used is unknown. What is known is that it will be different on the next press. The remote has &amp;quot;state&amp;quot;, i.e. it maintains internal variables such that the same user action at different times may not result in precisely the same effect. Persistence of the global environment permits modelling of remotes with &amp;quot;state&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Data Structures===&lt;br /&gt;
[[IRP Execution Model]]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3424</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3424"/>
		<updated>2025-11-23T16:19:02Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Give your Binary file back to the Community */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
If you are using the Nevo C2:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://sourceforge.net/projects/controlremote/ RM/RMIR.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using an IR Widget:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Or download [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it, you can [https://www.java.com/en/download/manual.jsp download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Now we can learn the codes. First, we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] ([https://archive.is/FEVaK archive copy]) on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3423</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3423"/>
		<updated>2025-11-23T16:18:02Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
If you are using the Nevo C2:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://sourceforge.net/projects/controlremote/ RM/RMIR.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using an IR Widget:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Or download [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it, you can [https://www.java.com/en/download/manual.jsp download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Now we can learn the codes. First, we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] ([https://archive.is/FEVaK archive copy]) on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3422</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3422"/>
		<updated>2025-11-23T16:16:59Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* USING AN IR WIDGET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
If you are using the Nevo C2:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://sourceforge.net/projects/controlremote/ RM/RMIR.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using an IR Widget:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Or download [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it, you can [https://www.java.com/en/download/manual.jsp download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Now we can learn the codes. First, we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] ([https://archive.is/FEVaK archive copy]) on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3421</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3421"/>
		<updated>2025-11-23T16:16:42Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* USING AN IR WIDGET */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
If you are using the Nevo C2:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://sourceforge.net/projects/controlremote/ RM/RMIR.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using an IR Widget:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Or download [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it, you can [https://www.java.com/en/download/manual.jsp download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Now we can learn the codes. First, we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] ([https://archive.is/FEVaK arhive copy]) on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3420</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3420"/>
		<updated>2025-11-23T16:11:39Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
If you are using the Nevo C2:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://sourceforge.net/projects/controlremote/ RM/RMIR.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using an IR Widget:&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Or download [https://web.archive.org/web/20160305015553/http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it, you can [https://www.java.com/en/download/manual.jsp download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Now we can learn the codes. First, we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3419</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3419"/>
		<updated>2025-11-23T15:54:29Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Learning the IR codes from your own remote. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through [https://web.archive.org/web/20160417092406/https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/] (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
:If you are using the Nevo C2:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 RM/RMIR.EXE]&amp;lt;br /&amp;gt;[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you are using an IR Widget:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;[http://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Or download [http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it you can [http://java.sun/j2se/1.4.2/download.html download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now we can learn the codes. First we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at https://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3418</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3418"/>
		<updated>2025-11-23T15:51:43Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Installing the Binary file to the Slingbox. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
[https://web.archive.org/web/20161021050303/https://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/ http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/]&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
:If you are using the Nevo C2:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 RM/RMIR.EXE]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you are using an IR Widget:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;[http://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Or download [http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it you can [http://java.sun/j2se/1.4.2/download.html download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now we can learn the codes. First we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at http://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3417</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3417"/>
		<updated>2025-11-23T15:50:05Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Obtaining the Binary file for the Custom Remote */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [https://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
:If you are using the Nevo C2:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 RM/RMIR.EXE]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you are using an IR Widget:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;[http://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Or download [http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it you can [http://java.sun/j2se/1.4.2/download.html download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now we can learn the codes. First we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at http://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3416</id>
		<title>How to Create Custom Remote Controls and use them on your Slingbox</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_Create_Custom_Remote_Controls_and_use_them_on_your_Slingbox&amp;diff=3416"/>
		<updated>2025-11-23T15:49:25Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* The Basic Procedure. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by: Al Richey&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most common posts on the support site is about remote codes for unsupported devices. So if you find yourself in this situation I hope this will help. Before detailing the steps to go through there are some basic things you need to understand (this isn&#039;t essential reading but everything will make much more sense if you do know the details)&lt;br /&gt;
&lt;br /&gt;
==Background information==&lt;br /&gt;
===Different UEI Chips===&lt;br /&gt;
: There were five different chips used in Slingboxes. These are designated as JU, PK, PL, RV &amp;amp; JB. If you want to check your type you can verify your IR blaster version in the Slingbox Properties dialog. Then match the IR version number with the chip type using the chart below.&lt;br /&gt;
#JU (VERY old US boxes)&lt;br /&gt;
#PL (current US boxes)&lt;br /&gt;
#PK (never used)&lt;br /&gt;
#RV (old European boxes)&lt;br /&gt;
#JB (All modern Slingboxes, but compatible with PL files)&lt;br /&gt;
&lt;br /&gt;
So unless you have an old European Solo all you need is the PL file.&lt;br /&gt;
&lt;br /&gt;
===Slingplayer Compatibility===&lt;br /&gt;
: In older versions of Slingplayer it was possible to change the look of the Custom Remote skin‟. Since Slingplayer V1.5 this functionality has been removed and as far as the look of the Remote is concerned you are stuck with the Generic design produced by Sling Media. All we can do is change the codes that are sent when a specific button is pressed. One drawback of the Generic Remote is that it has only the main buttons, so extra buttons on other remotes (such as Audio/Setup…) can not be mapped directly. What we have to do is put them into a Custom Menu which is accessed by tapping on the Menu button on the Generic Remote or right-clicking on the image.   (Note:  If a remote image has already been produced by Sling it is possible to use that image instead of the generic image, just contact me at alan@rmrsoft.com) &lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
===Setup Code Nomenclature===&lt;br /&gt;
: When you run the &amp;lt;b&amp;gt;Configure Inputs&amp;lt;/b&amp;gt; routines in the various Slingplayers and select a supported device, what actually happens is that a Binary Code is downloaded to the Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: This Binary Code details the IR codes that are sent when a specific button is pressed on the remote. Unfortunately the native Slingbox software doesn&#039;t use separate binary files that we can edit, their codes are apparently compressed and packaged into special files that we can&#039;t do anything with (that I know of). But what we can do instead of editing the built-in codes is to use a separate external upgrade code file. These files have the format such as &amp;quot;C1234_PL.BIN&amp;quot;.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: The first letter of the file describes the type of device, the main ones we are interested in are:&lt;br /&gt;
&lt;br /&gt;
::V which is for VCRs, which encompasses PVRs, DVRs and other recorders&lt;br /&gt;
::S which is for Satellite and FTA set top boxes&lt;br /&gt;
::C which is for Cable boxes&lt;br /&gt;
::Y which is for DVD Players&lt;br /&gt;
&lt;br /&gt;
:This is followed by a 4-digit code number. For Slingboxes the code numbers can be between 0000-2047 (actually higher in newer Slingboxes but to stay safe we are better staying below 2047). In general, codes below 2000 actually relate to specific boxes, for example V0618 is the code for a TIVO and D0032 is the code for a Pioneer CD Player. But we can feel fairly safe using 2000-2047 for our own codes. The final part of the filename defines the chip for which it will run.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: So if you were looking for the binary file for a PVR with a code number allocated 1234, designed to run on a PL-equipped Slingbox, you would be searching for a file called V1234_PL.BIN. Note: You must NEVER change the name of the file, as the letter, code number and chip type are also defined inside the file itself.&lt;br /&gt;
&lt;br /&gt;
===JP1===&lt;br /&gt;
:You will hear a lot about &amp;quot;JP1&amp;quot;. Basically this is a process whereby people using &amp;quot;One For All‟ (OFA) remote controls can add new codes to their remotes from their PC. The remote control processor inside the Slingbox is made by the same company that makes OFA remotes, so the upgrades are similar. The JP1 tools have been upgraded so that we can now use them to create and modify upgrades for the Slingbox.&lt;br /&gt;
&lt;br /&gt;
==The Basic Procedure.==&lt;br /&gt;
The official procedure to follow was to report the [https://web.archive.org/web/20100605080308/http://support.slingmedia.com/get/KB-005640.html Lack of a Supported Remote] to SlingMedia and they would add it to the database. In practice, they were not quick at doing this (I have been asking for a remote for over 4 years now), and the updated remote list seems to be only occasionally updated. So it was really not a practical quick solution.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;So what folks need to do is to create or acquire the correct Binary code file for your A/V device, and then install it into your Slingbox. This installation process is covered in detail in [[#Installing_the_Binary_file_to_the_Slingbox|Section 4]], so first let‟s see where you can look for these files.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Obtaining the Binary file for the Custom Remote==&lt;br /&gt;
&lt;br /&gt;
#Before starting, make sure in the setup wizard you have tried all the devices by that same manufacturer, even if the model number does not match, and all the associated code numbers. It&#039;s also worth trying your TV Provider in case they have &#039;badged&#039; someone else&#039;s box.  You might be lucky and find one that works and that will save a lot of work. If that doesn&#039;t solve the problem here is the step by step approach to getting hold of your binary file:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Go to the JP1 forum. This has a specific Download area for [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Custom Remotes], so go through all those to see if your device has already been done.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#If it isn&#039;t there the JP1 forum also has a more general [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 File Download Area]. From this page you select the download area for the specific type of device and check there. If you are lucky you will find a source file for using in the program RemoteMaster (RM or KM files), the use of which is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Have a look on the Hava forums. They are also using the same chips and the files might be there. Check out this [http://www.myhava.com/forum/viewforum.php?f=17&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=d&amp;amp;start=0 forum]. You‟re looking for a PK or PL file. They can be imported into Remote Master and then converted to the PK, PL, RV or JU files for the Slingbox. Again this is discussed in [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Do it yourself by buying a Nevo C2, or an IR Widget, and learn the codes needed to control the device. How to do this is covered in [[#Learning_the_IR_codes_from_your_own_remote|Section 5]] &amp;amp; [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Ask someone else to do the work for you. You can try this by posting a request for help in either:&lt;br /&gt;
##The [https://community.sling.com/content Slingbox Answers Forum].&lt;br /&gt;
##The [http://www.hifi-remote.com/forums/viewforum.php?f=19 JP1 forum].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
I can normally install your device on my Harmony Universal Remote to mimic the original Remote and learn the codes for you (unless I am away on holiday).&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Binary file to the Slingbox.==&lt;br /&gt;
&amp;lt;br /&amp;gt;I have written a comprehensive Installation Guide at &lt;br /&gt;
&lt;br /&gt;
http://placeshiftingenthusiasts.com/how-to-install-a-custom-remote-onto-the-slingbox/&lt;br /&gt;
&lt;br /&gt;
Once you have completed the setup and the BIN files have been downloaded to the Slingbox they are not used any more and can be deleted.&lt;br /&gt;
&lt;br /&gt;
==Learning the IR codes from your own remote.==&lt;br /&gt;
===Requirements===&lt;br /&gt;
Assuming you have decided to create the Remote Binary File yourself, the first stage is to learn the codes from your original Remote. This is what you need:&lt;br /&gt;
====Hardware====&lt;br /&gt;
#A computer with a USB port.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#A A Nevo C2 Learning Remote (Available on E-Bay for $20 or so) or alternatively&lt;br /&gt;
&lt;br /&gt;
:An IR learning &amp;quot;widget&amp;quot;. I got mine from Tommy Tyler through https://www.tindie.com/products/TommyTyler/ir-widget-infrared-remote-control-signal-recorderanalyzer/ (My preferred solution).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Software====&lt;br /&gt;
:If you are using the Nevo C2:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 RM/RMIR.EXE]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=7201 RDF Files] These are support files for the program.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;If you are using an IR Widget:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;[http://www.compendiumarcana.com/irwidget/irscope.zip IRSCOPE.EXE]&amp;lt;br /&amp;gt;[http://www.ftdichip.com/Drivers/VCP.htm The drivers]&amp;lt;br /&amp;gt;[http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=922 The IR decode DLL]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Or download [http://rmrsoft.com/remote.zip my full IRSCOPE/REMOTEMASTER package].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Much of the JP1 software needs the java runtime environment (JRE) as well. A lot of computers will already have it installed already, but if you need it you can [http://java.sun/j2se/1.4.2/download.html download]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now we can learn the codes. First we will cover the procedure using a Learning Remote, then cover it using an IR Widget.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===USING A LEARNING REMOTE===&lt;br /&gt;
====Getting the Codes from your Remote====&lt;br /&gt;
Follow the instructions to learn your remote codes so the Nevo C2 operates your device.   Then download the settings file onto your PC.&lt;br /&gt;
 &lt;br /&gt;
====Getting the Codes onto your PC.====&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Install RMIR.EXE onto your PC. It comes as a ZIP file rather than an installation package, which you need to unzip to your PC. The files can actually go anywhere but as a bit of tidy person (geek?) I created a C:\Program Files\IR\ folder and put the files in there.   Now go into the folder and click on Setup.vbs and that will produce shortcuts to run RMIR and RM  (Full instructions are at http://www.hifi-remote.com/wiki/index.php?title=JP1_-_Just_How_Easy_Is_It%3F_-_RM-IR_Version)&lt;br /&gt;
:#You will need to create a sub folder called \RDF\ in whatever folder you have put the IR program and extract the RDF support files into that folder.  Again, refer to the instructions.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now plug your Nevo into the PC and start RMIR.   Use the &#039;&#039;&#039;Remote &amp;gt; Download Remote&#039;&#039;&#039; menu option to get the data from the Nevo to the PC.   &lt;br /&gt;
&lt;br /&gt;
Under the &#039;&#039;&#039;Devices Tab&#039;&#039;&#039; you should now see the device.   Select it, then use the Edit Device button and then the Save As button to produce the required RMDU file.&lt;br /&gt;
&lt;br /&gt;
You can now post that file to the forum where you requested the remote, or if you want to do it yourself then go to the next Section.&lt;br /&gt;
&lt;br /&gt;
===USING AN IR WIDGET===&lt;br /&gt;
If you are using an IR Widget there is an excellent guide [http://freepdfhosting.com/6ea1213d67.pdf here] on the Tindle site. So I suggest you download that and read it thoroughly. There is no point in repeating it here, but just to emphasise a few points:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#You will want to regularly check for updates to the decodeir.dll. As new protocols are recognized, this dll will change.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#There is no way to save the learned values for importing into RemoteMaster (where you will make the remote) so you will need to write them down.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Although I tend to put programs into C:\Program Files\.... this can be a bit dodgy in Windows as programs cannot save files to this area because of security limitations. So it might be safer to install it under \Documents\&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#The Guide has a very useful section comparing using a Learning Remotes and the IR Widget and highlighting the differences, (For example &amp;quot;Key&amp;quot; is equivalent to &amp;quot;OBC&amp;quot;) so you could check out the previous sub-section covering using IR.EXE and the Learning Remote. And then you will understand this section. When complete you can move onto [[#Creating_your_own_Binary_files_using_RemoteMaster|Section 6]] to create the Binary file.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating your own Binary files using RemoteMaster==&lt;br /&gt;
:#To make life easier I have packaged a full set of the latest files required and uploaded them to my site. Just download them from [http://www.rmrsoft.com/remote.zip here] and unzip them onto your computer.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Start RemoteMaster.EXE. You may be promoted to highlight the folder the folder that contains the RDF files (Highlight the \RDF\ folder in the folder where you placed Remotemaster). You may also have to do the same for the Images folder. The display will now look something like this:[[Image:RM-setup.jpg]]&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#If you have obtained an .rmdu file then use the File &amp;gt; Open menu option to load the file. If you have obtained a .bin file then use the Advanced &amp;gt; Import Binary Upgrade to load up the details. If you have not obtained a file then you will have to input the codes manually.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now to explain the main Setup Tab:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Description &#039;&#039;&#039;: Use anything you like, I tend to use the device name.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Remote&#039;&#039;&#039;: Select the one appropriate for your chip.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device Type&#039;&#039;&#039;: Should be set to the correct type of device (as covered in Paragraph 3 of Section 1).&amp;lt;br /&amp;gt;&#039;&#039;&#039;Setup Code&#039;&#039;&#039;: This is where you put the 4-digit code. In theory it can be any number between 0000 and 2047, but as explained in Section 1 Paragraph 3, numbers below 2000 may actually be already allocated to specific devices, so to be safe I personally use 2010. Fell free to use your own value.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Protocol&#039;&#039;&#039;: From the dropdown list select the Protocol you discovered when you used IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Device&#039;&#039;&#039;: Type in the Device code you recorded from IR.EXE/IRSCOPE.EXE.&amp;lt;br /&amp;gt;&#039;&#039;&#039;Sub-Device&#039;&#039;&#039;: If applicable type in the Sub-Device code you recorded from IR.EXE/ IRSCOPE.EXE.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Functions Tab&amp;lt;br /&amp;gt;[[Image:RM-functions.jpg]]&amp;lt;br /&amp;gt;This picture shows the program with an .rmdu file or .bin file already imported; otherwise the code columns will be blank.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The entries are fully configurable, so if there are pre-defined functions that you do not need (pip swap, pipmove..) then you highlight them and tap the &amp;quot;Delete&amp;quot; button. If you have a function that is not pre-defined (Audio, Setup…) then tap the &amp;quot;New&amp;quot; button and enter them.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now fill in the codes for each button that you recorded. You just put in the OBC value and press &amp;lt;Enter&amp;gt;, the other 2 values will be generated automatically based on the protocol you selected. Also, if you used a JP1 learning remote, there&#039;s a way to cut and paste all the codes which saves needing to enter them all. In IR, if you select File &amp;gt; Summary you get a page listing lots of stuff. If you scroll down, you&#039;ll see a list of learn decodes. You can cut and paste this list into Excel, then you can re-arrange the columns and just select the button names and OBC codes to cut and paste into RM. You can move the RM columns, so if the OBC column isn&#039;t the one next to the button names, you can move it there.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Buttons Tab&amp;lt;br /&amp;gt;[[Image:RM-buttons.jpg]]&amp;lt;br /&amp;gt;This is where you map the defined functions onto the available buttons. Simply tap the Auto-Assign button which should allocate most of the buttons. For any buttons left in red drag the function name from the table on the left to the function column on the right. But note that not all these buttons are available on a Slingplayer Generic Remote. For example the &#039;Slow&#039; and &#039;Eject&#039; buttons do not exist on a Generic Remote. So only map the functions onto the buttons that actually exist (You will see that when you check out the Layout Tab, and from experience when you have done this a few times).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;The important ones to note are the Custom 10-29 buttons. These are the ones you use for the functions you need that aren&#039;t on the generic remote and they subsequently appear in the drop down menu of the remote as Custom options (except for Custom 22-26 which are pre-allocated to the colour buttons).&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Now tap on the Layout Tab.&amp;lt;br /&amp;gt;[[Image:RM-layout.jpg]]&amp;lt;br /&amp;gt;This shows the generic Slingplayer remote and shows the buttons you can actually use in the Buttons Tab. If a button shows yellow then that means it is in use. If it shows black (the PgUp/PgDn in the picture) then has not been allocated a function.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Again you can drag and drop functions onto a button.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:#Once you have finished experimenting go back to the Setup tab. Select the appropriate Slingbox remote, go to the &#039;Advanced&#039; menu at the top and select &#039;Export Binary Upgrade&#039;. This will produce the BIN file that we have discussed in previous Sections. If you aren‟t sure which Slingbox Chip you have then create a BIN file for the main 2 chips, so that would give you something like&amp;lt;br /&amp;gt;&lt;br /&gt;
:::C2010_PL.BIN&lt;br /&gt;
:::C2010_RV.BIN&lt;br /&gt;
&lt;br /&gt;
So now you can go back to [[#Installing_the_Binary_file_to_the_Slingbox.|Section 4]] and install the new Custom Remote onto your Slingbox.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Finding Missing Codes====&lt;br /&gt;
You can often find yourself in the position where the Custom Remote generally works OK but some of the functions are missing or some are sending the wrong code. This is relatively easy to fix by trial and error. The OBC codes must lie between 0-255, so the first thing to do is make a list of the OBC codes that are not being used in the Remote Control. Now use Remotemaster to allocate those codes to the 0-9 buttons and the 15 Custom buttons.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;Now build a new BIN files, replace the one in your \SBAV\ folder and rerun the &amp;quot;Setup Video Sources&amp;quot; routine. Now try those buttons and see if any of them action the missing function. If you find the missing codes then you can update the original remote file. You may have to repeat this operation 10 times to cover all the missing codes, although you can cut down the number of times by also using the Transport buttons (Play/Pause…) and Channel, Page +/- buttons as well.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Give your Binary file back to the Community==&lt;br /&gt;
Finally, remember that it is good to payback. If you find a remote file that works for you then upload it to the JP1 Forums. The way to do this is:&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#Put the 4 Binary files and the Remote Master RMDU file into a ZIP file. I also tend to add a Readme file in case users are unsure how to use the files. Although hopefully they will have read this article and will know what to do.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
#To be really helpful, you should upload your files in 3 different places:&lt;br /&gt;
##Upload your ZIP file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=87 Slingbox Binary Files] area.&lt;br /&gt;
##Upload the Remote Master RMDU source file to the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=98 Slingbox RM Files] area.&lt;br /&gt;
##Upload the RMDU file to the appropriate area in the [http://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrades] area.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
I hope these instructions have been helpful. If you have any suggestions for changes or improvements please E-mail me at &#039;&#039;&#039;alan (at) rmrsoft (dot) com&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IR_Help&amp;diff=3415</id>
		<title>IR Help</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IR_Help&amp;diff=3415"/>
		<updated>2025-11-23T15:44:26Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350 vickyg2003]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There is so much to learn about JP1. It’s a fascinating subject, but chances are if you are reading this, all you want to do is control your TV, VCR and DVD using 1 remote. This is my attempt to create a guide on how to use IR and the supporting tools. But keep in mind that the software is continually evolving and this document was last updated in the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
This is compiled from many posts and articles I read in the JP1 forum. I’ve borrowed freely from what I’ve read on the JP1 site at hifi-remotes.com, and from the old Yahoo site. My thanks to everyone on the JP1 experts who created the tools and shared their knowledge. - [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350 Vickyg2003]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chapter 1 - Getting Started&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[JP1 or JP1x]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Remote basics]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[RDFs]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR.EXE Safety]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[How can I reset my remote?]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Files to run the JP1 Tools]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 2 - Next Steps&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Connecting IR to your remote]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s Display]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s Menus]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s General Tab]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s CodeSelector]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Sorts and Moves]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Macros]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Key Moves]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Learned Signals]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fav Scan]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 3 - Intermediate Programming&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Remote Memory Usage]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Device Upgrades]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Using KM, Keymap-Master, to create a device upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Using RM, RemoteMaster, to create a device upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Protocol Upgrades]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Creating a Better Upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[EFCs and OBCs]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 4 - Advanced Programming&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Extenders]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Special Protocols]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 5 - Finding Codes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Finding Codes]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 6 - Modem Upgradeable Remotes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[WAV FILES]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 7 - The Glossary&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Glossary]]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=User:Vickyg2003&amp;diff=3414</id>
		<title>User:Vickyg2003</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=User:Vickyg2003&amp;diff=3414"/>
		<updated>2025-11-23T15:43:57Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JP1 profile: https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Main_Page&amp;diff=3413</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Main_Page&amp;diff=3413"/>
		<updated>2025-11-23T15:40:07Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;(Back to &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums JP1 Forums]&amp;lt;/span&amp;gt;)&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Welcome to the JP1 community Wiki site.  A collaborative website relative to the JP1 community to which anyone can contribute!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PLEASE NOTE:&#039;&#039;&#039;  The Wiki section of this website has a different account system than the Forums, so please don&#039;t try to log onto the Wiki using your JP1 account id.  If you wish to contribute, please see the [[Main Page#Note to new Wiki users|Note to new Wiki users]] below, and one of us will create a Wiki account for you.&lt;br /&gt;
&lt;br /&gt;
==JP1 Guides== &lt;br /&gt;
*[[JP1_Introduction|Introduction to JP1]]&lt;br /&gt;
*[[The History of the JP1 Project]]&lt;br /&gt;
*[[JP1 - Just How Easy Is It?]]&lt;br /&gt;
*[[The WHAT and WHY of JP1]]&lt;br /&gt;
*[[Creating A Better Upgrade]]&lt;br /&gt;
*[[JP1 Cables]]&lt;br /&gt;
*[[Building the Arduino Interface for older remotes]]&lt;br /&gt;
*[[Hacking JP1 Remotes]]&lt;br /&gt;
*[[Extenders (an FAQ)]]&lt;br /&gt;
*[[Infrared Signals]]&lt;br /&gt;
*[[How to use RIDgen]]&lt;br /&gt;
*[[IrScrutinizer Guide]]&lt;br /&gt;
*[[ToadTog]]&lt;br /&gt;
*[[Getting started with Xsight and Nevo]]&lt;br /&gt;
*[[Xsight_Disassembly]]&lt;br /&gt;
*[[Importing Foreign IR Remotes in RemoteMaster]]&lt;br /&gt;
*[[Using URC6440 and OARUSB04G Remotes with Linux]]&lt;br /&gt;
&lt;br /&gt;
==Manuals==&lt;br /&gt;
*[[Manuals|Remote Manuals]]&lt;br /&gt;
*[[Remote Master Manual]] (not complete)&lt;br /&gt;
*[[IR Help]]&lt;br /&gt;
*[[Protocol Builder]]&lt;br /&gt;
*[[IR Scope and IR Widget User&#039;s Guide]]&lt;br /&gt;
*[[DecodeIR]]&lt;br /&gt;
*[[AIRWidget and IRScope Operating Instructions]]&lt;br /&gt;
*[[The 3660 family|The 3660 family of remotes]]&lt;br /&gt;
*[[INT-422|Programming an INT-422-4 Remote]]&lt;br /&gt;
*[[WAV FILES]]&lt;br /&gt;
&lt;br /&gt;
==General Remote Guides==&lt;br /&gt;
*[[Manual Programming - 9xx Commands]]&lt;br /&gt;
*[[Manual Programming - Sky Remotes]]&lt;br /&gt;
*[[Master Reset Instructions]]&lt;br /&gt;
*[[Modem Upgrade Procedure]]&lt;br /&gt;
*[[The Correct Learning Procedure]]&lt;br /&gt;
*[[RemoteChart]]&lt;br /&gt;
&lt;br /&gt;
==Website Archives==&lt;br /&gt;
The following are official websites that are no longer active, that have been archived here at hifi-remote.com.&lt;br /&gt;
*[https://www.hifi-remote.com/radioshack/ Radio Shack remotes page]&lt;br /&gt;
*[https://www.hifi-remote.com/rcinfo/ Radio Shack&#039;s www.rcinfo.com site]&lt;br /&gt;
*[https://www.hifi-remote.com/ofaold/ One For All backup #1]&lt;br /&gt;
*[https://www.hifi-remote.com/ofausa/ One For All backup #2]&lt;br /&gt;
*[https://www.hifi-remote.com/ofa-int/ One For All International]&lt;br /&gt;
*[https://www.hifi-remote.com/urc/ UEI&#039;s cable remotes page]&lt;br /&gt;
*[https://www.hifi-remote.com/hag/ Hudson Access Group&#039;s OFA page]&lt;br /&gt;
&lt;br /&gt;
The following are user-maintained sites that are no longer available.&lt;br /&gt;
*[https://www.hifi-remote.com/wasser/ John Wasser&#039;s old OFA site]&lt;br /&gt;
*[https://www.hifi-remote.com/ziggr/ Zig&#039;s Amazing IR Remote Control Page]&lt;br /&gt;
*[https://www.hifi-remote.com/huras/ Dave Huras&#039;s X10 and OFA Page]&lt;br /&gt;
*[https://www.hifi-remote.com/sony/ Rob Humphrey&#039;s Sony codes page]&lt;br /&gt;
&lt;br /&gt;
==Slingbox==&lt;br /&gt;
*[[How to Install a Custom Remote onto the Slingbox]]&lt;br /&gt;
*[[Customising the Remote Image on your Slingplayer]]&lt;br /&gt;
*[[How to Create Custom Remote Controls and use them on your Slingbox]]&lt;br /&gt;
*[https://www.hifi-remote.com/forums/viewforum.php?f=19 Slingbox forum]&lt;br /&gt;
*[https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=97 Slingbox files] (inactive)&lt;br /&gt;
&lt;br /&gt;
==Resources==&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://controlremote.sourceforge.io/ Remote Master Download]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.oracle.com/java/technologies/downloads/ Java Runtime Download (for Remote Master)]&amp;lt;/span&amp;gt;&lt;br /&gt;
*[[IRP Notation]]&lt;br /&gt;
*[[DecodeIR]]&lt;br /&gt;
*[[Working With Pronto Hex]]&lt;br /&gt;
*[[JP1 versus Harmony]]&lt;br /&gt;
*[[Technical Documents]]&lt;br /&gt;
*[[Glossary]]&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums JP1 Forums]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/dload.php JP1 Files]&amp;lt;/span&amp;gt; (inactive)&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.getzweb.net/jp1/ JP1 Lookup Tool]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.youtube.com/watch?v=ubrq9Pr3Y1Y&amp;amp;list=PLXmyroJbN9CAxc6vADS4iiXQT3fp0c-Iq JP1 &amp;quot;How To&amp;quot; Videos]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Lutron-Master-List.xls Lutron Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/IR_AVR_121.xls Onkyo Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Pioneer_Master_List.rmdu Pioneer Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Sanyo_Projector_Master.rmdu Sanyo Projector Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/sony/ Sony Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
*&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/files/wiki/Yamaha-Master.zip Yamaha Master List]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Note to new Wiki users==&lt;br /&gt;
Due to the incredibly high number of spam accounts being created on this wiki, we have been forced to disable the New Account feature.  If you wish to contribute to the wiki, please contact any of the following via the main JP1 Forum: &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=2 Rob]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350 Vicky]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=13357 3FG]&amp;lt;/span&amp;gt;, &lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=823 xnappo]&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=343 mdavej]&amp;lt;/span&amp;gt;.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=The_3660_family&amp;diff=3412</id>
		<title>The 3660 family</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=The_3660_family&amp;diff=3412"/>
		<updated>2025-11-23T15:24:04Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* User Manuals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The sections of this page follow the order of the User Manual that comes with the remote, and seeks to compare what you can do with the Remote Master software and a JP1 cable, compared to the Remote on its own.&lt;br /&gt;
&lt;br /&gt;
=About this family of remotes=&lt;br /&gt;
&lt;br /&gt;
These remotes include the &#039;&#039;&#039;[https://www.oneforall.com/universal-remotes/urc-3661-essential-6-antimicrobial-remote-control/ One For All URC-3661]&#039;&#039;&#039; (Europe), &#039;&#039;&#039;[https://www.oneforall.com/en-us/universal-remotes/urc-3680-essential-8-antimicrobial-remote-control One For All URC-3680]&#039;&#039;&#039; (USA), &#039;&#039;&#039;[https://www.walmart.com/ip/747238608 Onn URC-3660]&#039;&#039;&#039;(Walmart, USA) and &#039;&#039;&#039;[https://www.insigniaproducts.com/pdp/NS-RMT8D21/6495830 Insignia NS-RMT8D21]&#039;&#039;&#039; (Best Buy, USA). There is also the Insignia NS-RMT5D21 which has only four device buttons but also limited access to an Audio device. The URC-3660 and URC-3661 have six device buttons, but are capable of controlling eight devices but only if used with RMIR. The other two have eight device buttons. In the URC-3660 and URC-3661, RMIR refers to the missing buttons as &amp;quot;Dev4&amp;quot; and &amp;quot;Dev8&amp;quot;. In addition, the NS-RMT5D21&#039;s two further missing device buttons are labelled &amp;quot;AUDIO&amp;quot; and &amp;quot;Dev7&amp;quot;. There is also a missing Activity button on this one, referred to as &amp;quot;button5&amp;quot;. You can access the devices without a button by putting Dev4/Dev8 (or AUDIO/Dev7) in a macro. More about Macros later. There are powerful features on these remotes which are enabled with RMIR, in conjunction with a JP1 cable which connects to your computer.&lt;br /&gt;
&lt;br /&gt;
=Setting Up Your Remote=&lt;br /&gt;
&lt;br /&gt;
In the manual that comes with the remote, you are shown how to use built-in device codes to set up your devices. This may be adequate for your needs, but on occasions, not all buttons on the original remote will become available on your remote. In some cases, buttons may not be in the right place, or to your requirements. With RMIR there is another way.&lt;br /&gt;
&lt;br /&gt;
Your remote is able to &amp;quot;learn&amp;quot; signals from your original remote, and RMIR is able to decode those signals, in such a way that you can build up your own device code. You can then use the accompanying RMDU program to create your own Device Upgrade. The disadvantage is that it takes time and patience. One advantage is that you can get every button exactly where you want it. Another is that you can often get information to add one or two extra controls that were not originally on your remote, for things such as Discrete On and Discrete Off, as opposed to a Power Toggle button. Such controls are very useful in macros to turn everything on or off, without things getting out of sync, and you can often find them out by asking on the JP1 forum.&lt;br /&gt;
&lt;br /&gt;
You can find out how to add devices from other JP1 users, or to create your own from scratch, on [http://www.hifi-remote.com/wiki/index.php/JP1_-_Just_How_Easy_Is_It%3F this page]. You should read the entire page, and also [http://www.hifi-remote.com/wiki/index.php/JP1_Cables this one], which shows how to make a JP1 cable.&lt;br /&gt;
&lt;br /&gt;
=Volume Punch Through (&amp;quot;Volume Lock&amp;quot;)=&lt;br /&gt;
&lt;br /&gt;
The manual for your remote shows you how to lock your volume and mute buttons so that they always operate the same device. However, on the &amp;quot;General&amp;quot; Tab of RMIR, you can assign &amp;quot;Volume Punch Through&amp;quot; individually. So, for example, you can set volume controls on your BluRay device to operate the Volume on the TV, but the volume on a different device (say a CD player) to operate the volume on your amplifier. You only get this flexibility with RMIR.&lt;br /&gt;
&lt;br /&gt;
=Multi Macros (&amp;quot;Channel Shortcut Macros&amp;quot;)=&lt;br /&gt;
&lt;br /&gt;
This is where we get to the real power of this remote, in conjunction with RMIR.&lt;br /&gt;
&lt;br /&gt;
RMIR, on most remotes, enables use of a short press of the &amp;quot;Setup&amp;quot; key, in order to add a Shifted state to each key (two short presses for number keys). But with this family of remotes, there is also the Multi-Macro.&lt;br /&gt;
&lt;br /&gt;
In the Remote’s manual, you are shown how to put a sequence of numeric macros on the four colour keys, representing your favourite channels. Using the Red button as Sport, if, instead of briefly pressing the Red button, which sends the normal signal associated with that button, you press and hold it for a couple of seconds, you will get the channel you programmed in, and if you do another long press, it will go to the next one in the list. These macros can be global or device-specific.&lt;br /&gt;
&lt;br /&gt;
However, if you use RMIR, the macros can include keys other than numeric keys, and each macro can be put on almost any key. Not the three App keys (between the colour keys and the numbers), the Rewind/FastFwd keys, nor the device keys. And they will clash with the short-press function on a key where the short-press function involves a key move (including Volume Punch Through) or a macro. But on most keys they will work properly.&lt;br /&gt;
&lt;br /&gt;
Of course, a Macro can have just one step, and there doesn&#039;t have to be more than one Multi-Macro on any given key. As an example, if on your BluRay device, you put a single Device Specific Multi Macro on the Stop key, with just one stage which sends the code for &amp;quot;eject&amp;quot;, then if you press the Stop key briefly, the BluRay will stop playing, but if you press and hold it, the disc will be ejected. If you do want to have more than one multi-macro on a key, they are executed in the same order as they appear on the Special Functions tab.&lt;br /&gt;
&lt;br /&gt;
Another example is the Power key. You can use a short press to send the normal Power function to a device. A long press can be used to run a macro which will switch off the device and also other devices needed to use that device. For example, the BluRay player would have a macro on the long press to switch off the player, the TV and also the amplifier.&lt;br /&gt;
&lt;br /&gt;
You have 10 phantom keys (i.e., keys that are not physically on the remote, but which you can allocate in RMDU and include in macros) and 10 shifted-phantom keys per device. This gives you plenty of options for Shifted keys and Multimacros.&lt;br /&gt;
&lt;br /&gt;
=Real-Time Macros (&amp;quot;App Shortcut Keys&amp;quot;)=&lt;br /&gt;
&lt;br /&gt;
The Manual describes three App Shortcut Keys which can learn a macro that you enter in real time, giving the opportunity to wait for certain functions to have taken place before you press the next key. Once learned, you can just press the key and the remote sends the signals, remembering the times for which keys are held down, and the delays between them.&lt;br /&gt;
&lt;br /&gt;
With RMIR, you can place these macros on any key, global or device specific. You can actually write them from scratch, or edit the time for which each signal is sent, and the delay between signals. &lt;br /&gt;
&lt;br /&gt;
=Activities=&lt;br /&gt;
&lt;br /&gt;
The Manual describes &amp;quot;Activities&amp;quot; which allows you to have groups of keys from different devices working at the same time. There are more choices than given in the manual (for the URC-3660/1 at least) which involve Dev8 as the audio device. But you need RMIR to access Dev8 on the &amp;quot;6 Device&amp;quot; remotes.&lt;br /&gt;
&lt;br /&gt;
The Manual shows &amp;quot;AV Shift&amp;quot; and &amp;quot;Power Macro&amp;quot; as separate headings, but these are tied in with Activities. With &amp;quot;AV Shift&amp;quot;, pressing the AV/Input key brings up a TV menu to change the input, and for 10 seconds, the Arrow Keys and OK operate the TV. However, on some TVs, pressing the Input (AV) button cycles through the possible inputs, so you don’t need it to temporarily allocate the arrow keys and &amp;quot;OK&amp;quot; to the TV. Where it does, you may wish to use Activities, but RMIR provides an alternative. If not using activities, it’s still possible to write Key Moves to the Input/AV button so that it always sends the signal to cycle through inputs to the TV. &amp;quot;Power Macro&amp;quot; sends the Power signal to every device involved in the current Activity, but using standard Power keys on the remote which will be toggles. Sometimes the toggles get out of sync, and it’s possible to write your own (device specific) macros for the Power key, to make use of Discrete Power Off signals where known.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to use the inbuilt activity settings, but write your own macros instead, RMIR offers a function for this remote on the Advanced drop-down menu, to Disable activities. &#039;&#039;NOTE: This feature is available from version 3.0.0, released on 13 June 2023&#039;&#039;. Once you have done this, you can allocate the Activity keys as normal keys, or write macros on them. Unless you do this, anything you put on those keys won’t work. So, as an example, you may allocate a macro to the &amp;quot;Watch Movie&amp;quot; button, which switches on your TV, BluRay player, Amplifier, selects appropriate inputs and leaves the remote buttons controlling the BluRay player, except for Volume Punch Through controlling the amplifier. Depending on your devices, this may or may not be a better plan than using the built-in Activity feature. But without RMIR, you don’t have the choice.&lt;br /&gt;
&lt;br /&gt;
=More Features=&lt;br /&gt;
&lt;br /&gt;
==Macros==&lt;br /&gt;
&lt;br /&gt;
The manual doesn&#039;t even mention ordinary macros! With RMIR and your JP1 cable, you can put an ordinary macro on any button except the device buttons. It can be global or device specific. For example, the power button, under the BluRay device, can have a macro that switches off the BluRay player, the amplifier and the TV. Remember earlier that they were all switched on by pressing the &amp;quot;Watch Movie&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==Backlight==&lt;br /&gt;
&lt;br /&gt;
The Remote has a backlight, which can be switched on and off by a button at the bottom of the keys. When on, and a key is pressed, the backlight lights up for 10 seconds. RMIR allows you to change the time it lights for, there’s an entry on the General tab for this purpose. RMIR also allows you to allocate a function to that key! This would mean that every time you operated this function, you’d also be switching backlighting on and off. If you don’t want backlighting, you can set the time on the General tab to zero. This won’t stop the backlighting altogether, but it will be very short, a fraction of a second.&lt;br /&gt;
&lt;br /&gt;
In normal use, if backlighting is on, you have to press a key to light up the remote. If you want to operate it in a darkened room, the backlight button can be felt at the bottom of the remote. Press it once to turn backlighting off, press it again and the entire remote will light up.&lt;br /&gt;
&lt;br /&gt;
==Fast Forward, Rewind and Skip==&lt;br /&gt;
&lt;br /&gt;
There is a feature, undocumented in the official manual, where the signal sent by the Fast Forward and Rewind transport controls, depends on how long you hold the button down for. A short press sends a different signal to a long press. In the RMDU program, these alternatives are labelled Rewind, Rewind(Held), FastFwd and FastFwd(Held). Some people use the short press function as &amp;quot;Skip&amp;quot;, forwards or backwards as appropriate. Some people prefer to use the longer press for this purpose. As for the built-in devices, there isn’t a great deal of consistency between the two. If you design your own device, as per &amp;quot;Setting Up Your Remote&amp;quot; above, you can, of course, allocate these keys to your own preference.&lt;br /&gt;
&lt;br /&gt;
=User Manuals=&lt;br /&gt;
Here are the original user manuals for this family of remotes:&lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/URC-3660-onn.pdf Onn URC-3660] &lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/URC-3660.pdf One For All URC-3660] &lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/URC-3661.pdf One For All URC-3661]&lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/URC-3680.pdf One For All URC-3680]&lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/Insignia_NS-RMT3D21-English.pdf Insignia NS-RMT3D21]&lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/Insignia_NS-RMT5D21-English.pdf Insignia NS-RMT5D21]&lt;br /&gt;
* [https://www.hifi-remote.com/files/manuals/Insignia_NS-RMT8D21-English.pdf Insignia NS-RMT8D21]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=AIRWidget_and_IRScope_Operating_Instructions&amp;diff=3411</id>
		<title>AIRWidget and IRScope Operating Instructions</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=AIRWidget_and_IRScope_Operating_Instructions&amp;diff=3411"/>
		<updated>2025-11-23T00:15:44Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:AWFig0.png]]&lt;br /&gt;
&lt;br /&gt;
=INTRODUCTION=&lt;br /&gt;
These instructions apply to the Arduino IR Widget (&#039;&#039;&#039;AIRWidget&#039;&#039;&#039;) when used with its companion Windows software, &#039;&#039;&#039;IRScope v3.05&#039;&#039;&#039;.   Performance is functionally identical to that of the old IR Widget when used with &#039;&#039;&#039;IRScope 2.01a&#039;&#039;&#039;, and remains unsurpassed as a tool for capturing, recording, and analyzing signals transmitted by infrared remote controls.  Its fast optical sensor detects individual pulses of a remote&#039;s infrared LED to measure carrier frequency and ON/OFF times of carrier bursts with much greater accuracy and detail than possible with any other type of measurement instrument.  &#039;&#039;&#039;IRScope&#039;&#039;&#039; uses its smart algorithms and broad data base to identify the signal protocol and provide a complete analysis.  A graphic display similar to that of a digital storage oscilloscope provides a visual representation of the signal and shows precise timing details.  Each recording can be from 1/2 to 15 seconds long, and can be zoomed in or out to an exact scale from 1 to 1000 microseconds per pixel on your PC screen.  The &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; can display an unlimited number of records simultaneously, and data can be saved or imported and exported in many different formats. Section 13 on page 15 of these instructions shows how to build the simple, inexpensive &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; shown above and tells how to obtain the free software sketch the Arduino Nano needs to run it.&lt;br /&gt;
&lt;br /&gt;
=APPLICATION SOFTWARE=&lt;br /&gt;
A software bundle for &#039;&#039;&#039;IRScope&#039;&#039;&#039; (&#039;&#039;&#039;IRScope v3.05&#039;&#039;&#039;) can be downloaded at  &lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=26615 IRScope] , from which you can extract these files:&lt;br /&gt;
&lt;br /&gt;
#  DecodeIR.dll ............................. Application extension&lt;br /&gt;
#  DecodeIR.html .......................... Chrome HTML Document&lt;br /&gt;
#  ExchangeIR.dll .........................  Application extension&lt;br /&gt;
#  IRScope.exe ............................   Application&lt;br /&gt;
#  MakeHex.dll .............................  Application extension                                             &lt;br /&gt;
#  ReadMe.txt ..............................  Text Document                                                                                                                            &lt;br /&gt;
&lt;br /&gt;
Installing the software consists simply of placing items (1) through (4) in the same folder (any folder of your choice).  Items (5) and (6) are not essential to operation of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; and can be discarded if you don&#039;t want to keep them.  Item (5) is a good summary of the major features of &#039;&#039;&#039;IRScope&#039;&#039;&#039;, and also provides some useful information on drivers for the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; and how to install them.  Item (6) is an excellent reference on how protocols are decoded, and provides specifications for more than 100 of the most common infrared remote control protocols.&lt;br /&gt;
&lt;br /&gt;
=USB DRIVER=&lt;br /&gt;
&#039;&#039;&#039;AIRWidget&#039;&#039;&#039; requires the latest virtual COM port (VCP) driver available from FTDI Chip Ltd.  Windows 7 may search and find the driver automatically, but if that doesn&#039;t work you can download it at: [http://www.ftdichip.com/resources/utilities.htm FTDI Drivers].  If by chance you have an old version FTDI driver installed in your PC (older than &#039;&#039;&#039;2.04.06&#039;&#039;&#039;) you must first uninstall it by using a utility called &#039;&#039;&#039;CDM Uninstaller 1.4&#039;&#039;&#039;, which you can download at: [http://www.ftdichip.com/Support/Utilities.htm CDM Uninstaller] as either a command line version or GUI version.  The uninstaller download includes a brief &#039;&#039;&#039;readme.html&#039;&#039;&#039; file that explains how to use it.&lt;br /&gt;
&lt;br /&gt;
The first time you plug in your &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;, Windows&#039; &#039;&#039;&#039;New Hardware Wizard&#039;&#039;&#039; will prompt you through the driver installation process in two phases.  First, a driver ls installed for the &#039;&#039;&#039;USB Serial Converter&#039;&#039;&#039; function of AIRWidget.  Following that, a driver is installed for the &#039;&#039;&#039;USB Serial Port&#039;&#039;&#039; function of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.  Windows  may do it all automatically.  In case of problems you can verify whether your driver installation is working by opening &#039;&#039;&#039;Device Manager&#039;&#039;&#039; and expanding both the &#039;&#039;&#039;Ports (COM &amp;amp; LPT)&#039;&#039;&#039; list and the &#039;&#039;&#039;Universal Serial Bus controllers&#039;&#039;&#039; list.  Watch the lists as you plug in the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.  A new entry called &#039;&#039;&#039;USB Serial Port (COMX)&#039;&#039;&#039; (where &amp;quot;X&amp;quot; is the virtual COM port number assigned by Windows) should pop up at the end of the &#039;&#039;&#039;Ports (COM &amp;amp; LPT)&#039;&#039;&#039; list.  Simultaneously, a new entry called USB Serial Converter should pop up at the end of the &#039;&#039;&#039;Universal Serial Bus controllers&#039;&#039;&#039; list, as shown below in Figure 1.&lt;br /&gt;
[[File:AWFig1.jpg|frame|50px|center|Figure 1. Device Manager Showing Typical &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; Device Recognition]]&lt;br /&gt;
=THE MAIN WINDOW=&lt;br /&gt;
After plugging in your &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; and opening &#039;&#039;&#039;IRScope&#039;&#039;&#039; the  operating window will&lt;br /&gt;
look something like Figure 2 below.  It contains all of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; controls, and will remain on your screen as long as your recording session is active.  The large blank area in the center is the decode area.  It will list all the signals you capture, and also those you retrieve from previously saved records.&lt;br /&gt;
[[File:AWFig2.jpg|frame|50px|center|Figure 2. Default Main Window]]&lt;br /&gt;
&lt;br /&gt;
The appearance may vary slightly depending on which Windows operating system you are using, as well as some of the configuration changes you may have made during your previous session.  The registry has keys that preserve many configuration changes from one session to the next so you can save your preferences.  To reset everything to default, run &#039;&#039;&#039;Regedit&#039;&#039;&#039; and delete the &#039;&#039;&#039;IRScope&#039;&#039;&#039; folder at &#039;&#039;&#039;HKEY_CURRENT_USER / Software / UEIC&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Port&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... This must be set to the virtual COM port your &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; is connected to.  There are two ways to set it, manual and automatic.  If you drop down the Advanced tab menu and check the &#039;&#039;&#039;AutoLocate Widget&#039;&#039;&#039; option, then each time you open &#039;&#039;&#039;IRScope&#039;&#039;&#039; the computer will search through all the ports to find the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;, and automatically select that port.  It indicates this by greying out the Port box, as shown in Figure 2, and you can&#039;t change it.  If you un-check the &#039;&#039;&#039;AutoLocate Widget&#039;&#039;&#039; option, then each time you open &#039;&#039;&#039;IRScope&#039;&#039;&#039; the Port box will be highlighted, letting you know that the port number shown may or may not be correct.  If you get a port error message when you try to make a capture, drop down the list of COM ports and manually select the one that &#039;&#039;&#039;Device Manager&#039;&#039;&#039; says you are connected to.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Capture Duration&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Shows the total length of a recording in milliseconds, starting when the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; detects the beginning of a signal from your remote.  The entry in this box must be a number between &#039;&#039;&#039;500&#039;&#039;&#039; and &#039;&#039;&#039;15000&#039;&#039;&#039; (&#039;&#039;&#039;1/2&#039;&#039;&#039; second to &#039;&#039;&#039;15&#039;&#039;&#039; seconds).  The default value of &#039;&#039;&#039;700&#039;&#039;&#039; milliseconds is fine for capturing typical individual buttons, but should be increased to capture a macro containing several commands.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Hardware and Mode&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&#039;&#039;&#039;When using the AIRWidget this must  be set on Arduino Widget&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;View button&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to select a previously saved file for viewing.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Import button&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to import &#039;&#039;&#039;Pronto&#039;&#039;&#039; and &#039;&#039;&#039;UEI Learned&#039;&#039;&#039; formats and also &#039;&#039;&#039;Timing Lists&#039;&#039;&#039; of the form displayed by the &#039;&#039;&#039;Times Summary&#039;&#039;&#039; of the &#039;&#039;&#039;Learned Signals&#039;&#039;&#039; tab of &#039;&#039;&#039;IR.exe&#039;&#039;&#039; or by the new &#039;&#039;&#039;Summary&#039;&#039;&#039; facility of this program.  The &#039;&#039;&#039;Pronto&#039;&#039;&#039; import can handle both raw and pre-defined &#039;&#039;&#039;Pronto&#039;&#039;&#039; formats other than format 8000.  Imported signals are displayed exactly as if they had been captured with the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Capture button&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Prepares the system to collect data.  When you are all set-up and ready to record a signal, place your remote so that its LED emitter is within a few inches of the sensor end of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.  Click on &#039;&#039;&#039;Capture&#039;&#039;&#039;, then press a remote button to transmit a signal.  If you wait longer than five seconds before pressing a remote button, the capture will time-out with an error message.  Otherwise, captured data will appear at the end of the &#039;&#039;&#039;Capture Duration&#039;&#039;&#039;.  The default configuration is for the program to output an audible beep when you click on &#039;&#039;&#039;Capture&#039;&#039;&#039;, and again if it times out in five seconds.  If you don&#039;t like the beeps, click on &#039;&#039;&#039;Advanced&#039;&#039;&#039; and check the &#039;&#039;&#039;Suppress Beeps&#039;&#039;&#039; option.  A flashing white indicator on the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; tells you when it detects infrared signals.  If the indicator is on constantly, you may be in an area of too high ambient illumination.  Avoid bright lights or direct sunlight where you use  the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Decode area&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... This area shows a list of all the signals you have captured.  Most of the column headings are self-explanatory, and the column widths are completely adjustable.  If there is a &#039;&#039;&#039;sub-device&#039;&#039;&#039;, its number appears following a decimal point in the &#039;&#039;&#039;Device&#039;&#039;&#039; column.  Comments in the &#039;&#039;&#039;Misc&#039;&#039;&#039; column describe repetition characteristics of a signal.  No Repeat means the signal consisted of only one full frame.  &#039;&#039;&#039;+N&#039;&#039;&#039; copies means the signal consisted of the initial frame followed by &#039;&#039;&#039;N&#039;&#039;&#039; identical copies.  &#039;&#039;&#039;+N&#039;&#039;&#039; dittos means the signal consisted of the initial frame followed by &#039;&#039;&#039;N&#039;&#039;&#039; ditto frames.  These terms are defined as follows:&lt;br /&gt;
&lt;br /&gt;
::A &amp;quot;signal&amp;quot; is a message or command that causes a device to do something.  A macro is a collection of two or more signals to the same or different devices.&lt;br /&gt;
&lt;br /&gt;
::Signals are made up of one or more &amp;quot;frames&amp;quot;.  Sometimes frames are repeated as long as a button is held down.  Many remotes are programmed to repeat frames two or three times for redundancy, even if a button is barely tapped.&lt;br /&gt;
&lt;br /&gt;
::Full frames often have an initial starting burst (usually distinctively long) and a final OFF time long enough to clearly indicate separation between frames.  Within the frame are a series of bursts and spaces that encode address bits, data bits, etc.&lt;br /&gt;
&lt;br /&gt;
::Ditto frames consist of only a starting and ending burst.  They are used primarily to indicate that a button is being held down, such as might be done when increasing or decreasing audio volume.&lt;br /&gt;
&lt;br /&gt;
:For saving, exporting, or deleting a recording, moving it up or down in the list, adding notes, etc., select (highlight) the target decode entry by single-clicking anywhere on it.  Deselect that one by selecting another one.  Or deselect all of them by clicking in a blank area.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Start, End, and Error&#039;&#039;&#039;&amp;lt;/u&amp;gt; ....    This data is used mainly by Forum experts when debugging decoding problems, and so is not of much use to the typical user.  You might prefer to make better use of screen space and keep the display simple by sliding those three columns beyond the right edge of the main window, out of sight.  Some of the illustrations in these instructions may appear that way.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Add/Edit Note&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to open a &#039;&#039;&#039;Decode Note Editor&#039;&#039;&#039; box for adding or modifying a comment in the &#039;&#039;&#039;Note&#039;&#039;&#039; column for a signal you have selected (highlighted) in the decode panel.  Very handy for keeping track of signal source identity, such as brand and model of device controlled, remote used, button pressed, etc.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Save As&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to save a recording you have selected (highlighted) in the decode area.  If you select more than one recording they will be saved as a single file but with each signal clearly separated.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Save All As&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... A faster and easier way to save the entire list of recordings in the decode area as a single file without having to first select them all individually.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Export&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to export decoded signals.  The format depends on the selection in &#039;&#039;&#039;Export Mode&#039;&#039;&#039; under the &#039;&#039;&#039;Export&#039;&#039;&#039; drop-down menu, and can be either &#039;&#039;&#039;Pronto&#039;&#039;&#039;, &#039;&#039;&#039;UEI Learned&#039;&#039;&#039;, or &#039;&#039;&#039;Lintronic&#039;&#039;&#039; (a format used by the Beoworld community).  The &#039;&#039;&#039;Pronto&#039;&#039;&#039; export is in the raw &#039;&#039;&#039;Pronto&#039;&#039;&#039; format, but can be generated from either the signal data or from its decode, as required.  Exports are appended to a file called &#039;&#039;&#039;ExportedUEI.txt&#039;&#039;&#039;, &#039;&#039;&#039;ExportedPronto.txt&#039;&#039;&#039; or &#039;&#039;&#039;ExportedLintronic.txt&#039;&#039;&#039;, as appropriate, and the file is created if it does not exist.  By default these files are created in the folder containing &#039;&#039;&#039;IRScope.exe&#039;&#039;&#039; but this can be changed with the &#039;&#039;&#039;Set Export Output Folder&#039;&#039;&#039; selection in the &#039;&#039;&#039;File&#039;&#039;&#039; drop-down menu.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Up, Down, and Delete&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Used to change the order of items in the decode area, or delete them entirely.  Deleting a decode entry automatically deletes its waveform display.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Signal structure&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Shows additional information about a signal that is selected in the decode area.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;IRP Form&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Presents a signal in &#039;&#039;&#039;IRP&#039;&#039;&#039; form when it is selected in the &#039;&#039;&#039;Decode Panel&#039;&#039;&#039;.  The &#039;&#039;&#039;IRP&#039;&#039;&#039; representation is made independently of the decode operation, so an &#039;&#039;&#039;IRP&#039;&#039;&#039; form can sometimes be determined for signals that cannot be decoded by &#039;&#039;&#039;DecodeIR&#039;&#039;&#039;, and vice versa.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Summary&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Opens a &#039;&#039;&#039;Summary&#039;&#039;&#039; display box like the one shown in Figure 3.&lt;br /&gt;
[[File:AWFig3.jpg|frame|50px|center|Figure 3. Summary Display]]&lt;br /&gt;
&lt;br /&gt;
:In addition to decoded parameters, the &#039;&#039;&#039;Summary&#039;&#039;&#039; display includes two forms of timing for a signal, the raw timings as used in the waveform display, and analyzed timings in which repeats have been identified and timings averaged over supposedly identical bursts.  To see all timing data, either scroll horizontally with the slider at the bottom, or check the &#039;&#039;&#039;Wrap to window&#039;&#039;&#039; box and scroll vertically with the slider at the right edge.  The &#039;&#039;&#039;Summary&#039;&#039;&#039; display can be saved in either Rich Text Format &#039;&#039;&#039;(.rtf)&#039;&#039;&#039; or as a plain text file &#039;&#039;&#039;(.txt)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Clear&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Clears all entries in the decode area and their corresponding waveform displays.  Does not delete any previously saved files.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Clear before capture&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Check this box to automatically clear the previous decode data and waveform each time you click on the &#039;&#039;&#039;Capture&#039;&#039;&#039; button to make a new recording.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Show waveform&#039;&#039;&#039;&amp;lt;/u&amp;gt; .... Checked by default, provides a &#039;&#039;&#039;Waveform Display&#039;&#039;&#039; of each new captured signal.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;u&amp;gt;&#039;&#039;&#039;Menu Bar&#039;&#039;&#039;&amp;lt;/u&amp;gt; ....  Right below the title bar of the main window is a menu bar with five drop-down menus, &#039;&#039;&#039;File, Edit, Export, Advanced&#039;&#039;&#039;, and &#039;&#039;&#039;Help&#039;&#039;&#039;.  There are so many sophisticated features within these menus that rather than try to explain them all here I suggest you experiment with them to explore your needs and preferences.&lt;br /&gt;
&lt;br /&gt;
=THE WAVEFORM DISPLAY=&lt;br /&gt;
Displaying a detailed picture of a recorded signal is a key feature of &#039;&#039;&#039;IRScope&#039;&#039;&#039;.  When you click on the &#039;&#039;&#039;Capture&#039;&#039;&#039; button, the PC sends a signal to the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; to start looking for an IR signal.  When the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; detects a remote signal it starts transmitting data to the PC at precise intervals, telling it how many infrared carrier pulses it has seen and when the carrier is turned on and off.  At the end of the selected Capture Duration time, the PC sends another signal to the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; to stop looking.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRScope&#039;&#039;&#039; then processes the data and displays the results two ways.  First, its analysis and identification of the recording appears in the decode area of the main window.  Second, a &#039;&#039;&#039;waveform display&#039;&#039;&#039; pops up in the upper left corner of your screen.  Those two items define what was captured, and remain linked together (even if you close the &#039;&#039;&#039;waveform display&#039;&#039;&#039;), until you delete the decode entry.  For an example we will use a recording captured from a &#039;&#039;&#039;Sony&#039;&#039;&#039; remote by pointing it at the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;, clicking on &#039;&#039;&#039;Capture&#039;&#039;&#039;, the tapping the &#039;&#039;&#039;POWER&#039;&#039;&#039; button on the remote.&lt;br /&gt;
Figure 4 shows the resulting &#039;&#039;&#039;waveform display&#039;&#039;&#039;, and Figure 5 shows the corresponding decode entry that appears in the main window.  Even if &#039;&#039;&#039;IRScope&#039;&#039;&#039; is unable to identify a signal it has captured, it still displays the waveform it received from the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; and labels it &amp;quot;unknown&amp;quot; in the protocol column of the decode area.&lt;br /&gt;
[[File:AWFig4.jpg|frame|50px|center|Figure 4. Waveform Display for Sony POWER Button]]&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig5.jpg|frame|50px|center|Figure 5. Decode Analysis for Sony POWER Button]]&lt;br /&gt;
In Figure 4, the first line of the waveform display shows the carrier frequency, followed by a one-line thumbnail sketch of the captured signal that provides an overview of your recording.  Our example was shot with the default selection of &#039;&#039;&#039;Thumbnail Scale&#039;&#039;&#039;, which is &#039;&#039;&#039;Entire Waveform&#039;&#039;&#039;.  That means the thumbnail shows everything that was recorded, from the beginning of the first signal to the end of the Capture Duration period.&lt;br /&gt;
&lt;br /&gt;
To select a different format for the thumbnail display, drop down the &#039;&#039;&#039;Advanced&#039;&#039;&#039; tab of the main window.  There are three choices available.&lt;br /&gt;
[[File:AWFig6.jpg|frame|50px|center]]&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Fixed Resolution&#039;&#039;&#039; shows captured data at a resolution of &#039;&#039;&#039;400µs&#039;&#039;&#039; per pixel:&lt;br /&gt;
[[File:AWWv1.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Limited Duration&#039;&#039;&#039; shows as much of the captured data as will fit on the line, up to a maximum of 300ms:&lt;br /&gt;
[[File:AWWv2.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entire Waveform&#039;&#039;&#039; shows everything captured during the entire Capture Duration time:&lt;br /&gt;
[[File:AWWv3.jpg|frame|50px|center]] &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The thumbnail scale is universal, and all waveform displays are immediately updated as soon as a new thumbnail scale format is selected.  It&#039;s not necessary to capture new samples after changing it, and you can change it as often as you like to find the one that you prefer in various situations.&lt;br /&gt;
&lt;br /&gt;
Sony12 protocol specifies that a remote should transmit a frame repeatedly about twenty times per second as long as a button is held down, but in no case less than three times even for a brief press of the button.  In our example the button was just tapped lightly.  But If it had been held down steadily, the Misc column of the decode entry would have said +14 copies, and the thumbnail would have looked like this:&lt;br /&gt;
[[File:AWWv4.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
The waveform display in Figure 4 depicts the demodulated carrier, drawn to a precise scale of &#039;&#039;&#039;20µs&#039;&#039;&#039; per pixel.  Waveform timing starts on the second line at time 0 (the moment the remote began transmitting), and increases from left to right across successive rows as you move down the screen.  Numbers down the left side (11860, 23720, 35580, 47440, etc.) show the time in µs at that point in the waveform.  Raised portions of the waveform are periods when the carrier is turned ON, and lower (baseline) portions are periods when it is turned OFF.  Numbers beneath the baseline (2400, 600, 1200, 600, etc.) are carrier ON and OFF times in µs, and numbers above the baseline within the raised portions (96, 48, 24, 48, etc.) are the number of carrier cycles (infrared pulses) that were counted by the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; during those ON bursts.&lt;br /&gt;
&lt;br /&gt;
Each time you capture a record a new waveform is displayed, always in the upper left area of the screen at default size, stacked on top of those previously recorded, and a new decode line is added in numerical order in the decode area of the window.  If the recording is of a macro it will be shown as a single waveform display with the actual time of separation between commands.  But each command of a macro will be listed separately in the main window with its own individual carrier frequency, protocol identity, and decoding, as if they were recorded separately.&lt;br /&gt;
&lt;br /&gt;
You can drag waveforms anywhere on your screen to compare several of them at the same time, or you can use the convenient Waveform Selection Tool (described in Section 6) to look at them one at a time.  The size, location, and scale of each waveform display can be individually adjusted with the mouse, but the changes will remain in effect only during the current session and cannot be permanently saved with the waveforms.&lt;br /&gt;
&lt;br /&gt;
=THE WAVEFORM SELECTION TOOL=&lt;br /&gt;
This is without doubt one of the handiest features of &#039;&#039;&#039;IRScope&#039;&#039;&#039;.  It enables you to list a large number of recordings in the decode area and have instant access to the waveform of any one of them with a click of the mouse.  The &amp;quot;Note&amp;quot; below the main window is completely explanatory:  &amp;quot;Double-click a decode entry to open and/or highlight its waveform.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Suppose you have collected six records, all listed in the decode area in the order you captured them, with waveforms stacked on top of each other on your screen so that all you can see is record #6 on top of the stack.  If you wanted to examine, for example, record #3 you simply double-click on that decode entry in the main window and Instantly that waveform display is brought to the top of the stack and highlighted in red.&lt;br /&gt;
&lt;br /&gt;
You don&#039;t even have to leave the waveforms stacked on your screen to use the selection tool.  You can get them all out of the way by CLOSING them, as long as you DO NOT delete anything in the decode list of the main window.  When you double-click an entry, the waveform will be re-opened automatically and highlighted for you.&lt;br /&gt;
&lt;br /&gt;
The selection tool works similarly with macro waveforms.  Instead of having to tediously scroll through a macro waveform display containing a bunch of commands to get to the one you want to examine, just double-click on its decode entry in the main window.  If the macro waveform is already opened it will Instantly scroll to that command, without changing size or position, and highlight only that portion of the macro so there&#039;s no mistake where it starts and ends.  If the macro waveform is closed, it will re-open automatically and scroll to the highlighted command.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=SAVING AND RETRIEVING CAPTURED DATA=&lt;br /&gt;
It is strongly suggested that you form the habit of naming and saving important files promptly.  When collecting a lot of data it&#039;s easy to get carried away and lose track of which records are which.  Every capture event, whether it be for an individual signal or a macro, produces a temporary file containing all of the numerical data sent from the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; and used to generate the signal analysis in the decode area as well as the graphic Waveform Display.  This data can be saved under a filename of your own choosing, or under a default filename automatically generated by &#039;&#039;&#039;IRScope&#039;&#039;&#039;, and consisting of the letters IR followed by a 14-character date/time code in the format: [YYYY] [MM] [DD] [HH] [MM] [SS].  Example:  IR20150411083927.  &lt;br /&gt;
NOTE: This is the date/time you are saving the file, not the date/time the recording was collected.&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;If you save a file using the same name as on that is already saved, the new file will replace the old file without any warning.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Saved files have an extension of .ict, but they are in text format and you can look at them with any text editor.&lt;br /&gt;
                                                                                                                         &lt;br /&gt;
[[File:AWFig6.jpg|frame|50px|center|Figure 6. Portion of a Typical .ict File]]&lt;br /&gt;
&lt;br /&gt;
Figure 6 shows the initial portion of a typical .ict file that has been opened with Notepad.  A number preceded by a &amp;quot;+&amp;quot; symbol is a carrier burst ON time in microseconds, followed by a comma and another number which is the number of carrier cycles in that burst.  A number preceded by a &amp;quot;─&amp;quot; symbol is an OFF time in microseconds between carrier bursts.  As you can see, there&#039;s enough information in the .ict file to completely reproduce the recording.&lt;br /&gt;
&lt;br /&gt;
Once you have saved a file, its filename appears in the title bar of the Waveform Display.  You can tell that the file in Figure 5 has not yet been saved because the title bar is blank.  Note that what you are saving consists mainly of raw numeric measurement data, not the decode analysis.  When a saved file is reopened, DecodeIR makes a fresh analysis, and its decode data immediately appears in the decode area.  If you open two or more copies of the same file, duplicate copies of the decode data will appear.  Notes which have been added to a decode entry in the Note column can also be saved so they are reproduced whenever the file is recalled. The note, if saved, is placed at the beginning of the first line of burst data in the .ict file.  But configuration changes made to a waveform display (e.g., zooming or resizing the waveform window) cannot be saved.&lt;br /&gt;
&lt;br /&gt;
=CHANGING THE APPEARANCE OF A WAVEFORM DISPLAY=&lt;br /&gt;
&#039;&#039;&#039;IRScope&#039;&#039;&#039; allows you to manipulate the appearance of waveform displays in many ways, for taking measurements, making comparisons, etc.  Probably the change that is most useful is to vary the waveform resolution to see more or less detail.  It&#039;s fast and easy.  To illustrate, I&#039;ll start with Figure 4 as an example.  Here&#039;s the start of what that waveform looks like as captured.&lt;br /&gt;
[[File:AWWv5.jpg|frame|50px|center]] &lt;br /&gt;
 &lt;br /&gt;
First I&#039;ll drag the width of the waveform window so that it fills the full width of my screen.&lt;br /&gt;
[[File:AWWv6.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
You&#039;ll notice that the amount of time shown in each horizontal line increased from &#039;&#039;&#039;11860µ&#039;&#039;&#039;s to &#039;&#039;&#039;23180µs&#039;&#039;&#039;, enough to show a complete frame on one line.  But resolution remains unchanged from the default value of &#039;&#039;&#039;20µs&#039;&#039;&#039; per pixel.&lt;br /&gt;
&lt;br /&gt;
Clicking anywhere on a waveform display pops up the &#039;&#039;&#039;IRScope&#039;&#039;&#039; Config box showing the present resolution.&lt;br /&gt;
[[File:AWFig6b.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
If we type any value from 1 to 1000 into the highlighted “microseconds per pixel” box and either hit Enter or click OK, the display instantly zooms to the new resolution.  Here&#039;s what the waveform looks like after we enter a resolution value of 100 microseconds per pixel to show all three frames on one line.  The window size and thumbnail resolution are not affected.&lt;br /&gt;
[[File:AWWv7.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
The numbers showing ON and OFF times and carrier pulse counts are still there, but they are too close together to be readable.  Unchecking those boxes in &#039;&#039;&#039;IRScope&#039;&#039;&#039; Config turns off the numbers for a clearer view of the waveform.&lt;br /&gt;
[[File:AWWv8.jpg|frame|50px|center]] &lt;br /&gt;
 &lt;br /&gt;
Here&#039;s a portion of a capture from a Pioneer DVD remote at standard resolution.  It shows how hard it is to distinguish all the time values when the protocol has many short on/off times in sequence.&lt;br /&gt;
[[File:AWWv9.jpg|frame|50px|center]] &lt;br /&gt;
 &lt;br /&gt;
Zooming in to a resolution of &#039;&#039;&#039;15µs&#039;&#039;&#039; or more makes it much easier to read the on and off times.&lt;br /&gt;
[[File:AWWv10.jpg|frame|50px|center]] &lt;br /&gt;
 &lt;br /&gt;
All examples shown so far are of PWM (pulse width modulation) protocols, where data bits (1&#039;s and 0&#039;s) are encoded either as the width of carrier-ON bursts separated by fixed duration OFF times, or the width of OFF times separated by fixed duration carrier-ON bursts.  Most IR protocols are PWM, but a few are PPM (pulse position modulation) protocol.  Here&#039;s an example of a Jerrold Cable PPM signal captured at standard resolution.&lt;br /&gt;
[[File:AWWv11.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
Since there is no carrier, no frequency value is shown at the beginning of the thumbnail, and a &amp;quot;0&amp;quot; is placed in the Frequency column of the decode entry.  Let&#039;s zoom out to &#039;&#039;&#039;120µs&#039;&#039;&#039; per pixel so things are not so spread out.&lt;br /&gt;
[[File:AWWv12.jpg|frame|50px|center]] &lt;br /&gt;
&lt;br /&gt;
Now you can see clearly that one frame of the signal has six single pulses, separated by two different spaces, &#039;&#039;&#039;11.3ms&#039;&#039;&#039; and &#039;&#039;&#039;7.7m&#039;&#039;&#039;s.  Let&#039;s zoom in as far as we can go (&#039;&#039;&#039;1µs&#039;&#039;&#039; per pixel) to look at a pulse in greater detail.&lt;br /&gt;
[[File:AWWv13.jpg|frame|50px|center]] &lt;br /&gt;
 &lt;br /&gt;
The waveform now shows each pulse has a width of exactly &#039;&#039;&#039;100µs&#039;&#039;&#039;, but that&#039;s misleading.  Since the Widget only reports the number of pulses it sees every &#039;&#039;&#039;100µs&#039;&#039;&#039; and doesn&#039;t measure them, we can&#039;t tell what the actual pulse width is.  We know only that it is a single pulse whose width is &#039;&#039;&#039;100µs&#039;&#039;&#039; or less.  (Examining these pulses with an oscilloscope would show them to be actually about &#039;&#039;&#039;75µs&#039;&#039;&#039; wide.)&lt;br /&gt;
=WORKING WITH MACROS=&lt;br /&gt;
Capturing a macro is not much different from capturing an individual command.  The main thing to remember is to set the Capture Duration to a value greater than the macro duration.  Here&#039;s an example of a typical macro for which I made an initial test capture with a duration setting of &#039;&#039;&#039;10,000 ms&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig7.jpg|frame|50px|center|Figure 7. 10-Second Capture of Macro Containing Four Commands]]&lt;br /&gt;
&lt;br /&gt;
The decode panel shows that this macro sends four commands:&lt;br /&gt;
#  Turn on a JVC receiver&lt;br /&gt;
#  Turn on a Sony TV&lt;br /&gt;
#  Send a TV/VCR command to the TV to set the input to VIDEO1&lt;br /&gt;
#  Turn on a Dish Network satellite receiver&lt;br /&gt;
&lt;br /&gt;
Note that each command of the macro is listed separately in the decode panel so that there is a place to show carrier frequency and decoding details.  In the waveform display of the macro, the thumbnail shows all four commands and the precise timing between them, however irregular it may be.  But since several different carrier frequencies are involved, the usual carrier frequency value is replaced with the comment &amp;quot;freq varies&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The first thing I&#039;ll do is to stretch the waveform display until that thumbnail line is an even ruler dimension on the PC screen, to give me a thumbnail scale factor of 10 seconds (the capture duration) divided by 10 inches (the length to which I adjusted the line), or 1 second/inch.  Then I&#039;ll measure from start to the end of the fourth command.  It is a little less than 3-1/4 inches.  That means I can record the entire macro with a capture duration setting of just a little over 3-1/4 seconds.  The data will be just as accurate, but I will avoid a lot of waiting for the capture to complete each time I have to re-record that same macro as I work with it.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
[[File:AWFig8.jpg|frame|50px|center|Figure 8. 3.5-Second Capture of Macro Containing Four Commands]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here&#039;s the same macro with capture duration reduced to 3500ms.  Compare this thumbnail with that in Figure 7, and remember that our thumbnail scale is set to show the entire capture duration.  When the captured signal is part of a macro, the calculation of carrier frequency shown in the decode entry is close, but not quite as accurate as when the signal is captured alone.  So if you want the most accurate measurement of carrier frequency possible you&#039;ll have to capture a sample of that signal protocol alone, not as part of a macro.  Macro speed (delay between commands) is usually determined by the design of the particular remote control used.  Sometimes it is possible to speed-up macro execution, and the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; can be of great help in testing changes to make sure you are not trying to go so fast that the equipment doesn&#039;t have time to respond to successive commands.&lt;br /&gt;
&lt;br /&gt;
Remember to use the Waveform Selection Tool to zip instantly to different commands of a macro recording for examination.  Don&#039;t waste time scrolling.  You can save one or several commands of a macro as one file by selecting them in the Decode Panel and using the Save As button.  But to save the entire macro as one file you don&#039;t have to select them one at a time.  Just use the Save All As button instead.&lt;br /&gt;
&lt;br /&gt;
=TAKING TIMING MEASUREMENTS FROM A WAVEFORM=&lt;br /&gt;
Since waveforms are drawn to exact scale and labeled with elapsed time at the start of each line as well as the duration of all carrier ON and OFF times, you can often just read the time you&#039;re interested in, or find it by adding a few values.  As an example, suppose I wanted to find the time between the first and second frames of the third command of the macro of Figure 8.  First I double-click on item 3 in the decode area so that the Waveform Selection Tool immediately displays command #3 highlighted in red, as shown in Figure 9.  The time we are looking for is from &#039;&#039;&#039;B&#039;&#039;&#039; (the end of frame #1) to &#039;&#039;&#039;C&#039;&#039;&#039; (the beginning of frame #2). &lt;br /&gt;
&lt;br /&gt;
[[File:AWFig9.png|frame|50px|center|Figure 9. Waveform Display of Macro Command #3]]&lt;br /&gt;
&lt;br /&gt;
That&#039;s the same as the OFF time of &#039;&#039;&#039;26382µs&#039;&#039;&#039; shown right below the line at &#039;&#039;&#039;B&#039;&#039;&#039;.  Too simple.  Let&#039;s make the example more complicated.  Suppose I wanted to find the total length of the third command, from &#039;&#039;&#039;A&#039;&#039;&#039; to &#039;&#039;&#039;D&#039;&#039;&#039; in Figure 9.  I&#039;ll show you three ways to do that, and you can decide which you prefer.&lt;br /&gt;
::&amp;lt;u&amp;gt;&#039;&#039;&#039;a.  Summation Method&#039;&#039;&#039;&amp;lt;/u&amp;gt;    This method is a no-brainer.  Just add all the ON and OFF time values below the line from the first point of interest, &#039;&#039;&#039;A&#039;&#039;&#039;, to the second point of interest, &#039;&#039;&#039;D&#039;&#039;&#039;.  The only drawback is there can be a LOT of numbers to add (77 in this case), and avoiding a mistake is tedious work.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;u&amp;gt;&#039;&#039;&#039;b.  Ruler Method&#039;&#039;&#039;&amp;lt;/u&amp;gt;    Using an ordinary 12-inch plastic ruler, measure the length of an empty line, such as the one beginning at &#039;&#039;&#039;2573620&#039;&#039;&#039;.  (On my screen it&#039;s 7.3 inches long)  Then determine the time represented by that line length by subtracting the starting time of one line from the starting time of the next one.  For example, &#039;&#039;&#039;2632920µs&#039;&#039;&#039; - &#039;&#039;&#039;2621060µs&#039;&#039;&#039; = &#039;&#039;&#039;11860µs&#039;&#039;&#039;.  Now divide &#039;&#039;&#039;11860µs&#039;&#039;&#039; by &#039;&#039;&#039;7.3 inches&#039;&#039;&#039; to get &#039;&#039;&#039;1625µs&#039;&#039;&#039; per inch, which is the scale factor.&lt;br /&gt;
&lt;br /&gt;
::Note that the entire command is contained on nine full lines plus two partial lines.  Measure the distance from A to the end of the first partial line (on my screen it&#039;s &#039;&#039;&#039;0.9&#039;&#039;&#039; inch x &#039;&#039;&#039;1625µs&#039;&#039;&#039; /inch = &#039;&#039;&#039;1463µs&#039;&#039;&#039;) and from the beginning of the last partial line to D (on my screen it&#039;s &#039;&#039;&#039;1.3&#039;&#039;&#039; inches x &#039;&#039;&#039;1625µs&#039;&#039;&#039; /inch = &#039;&#039;&#039;2113µs&#039;&#039;&#039;).  So the total length of the command is [&#039;&#039;&#039;9&#039;&#039;&#039; x &#039;&#039;&#039;11860&#039;&#039;&#039;] + &#039;&#039;&#039;1463&#039;&#039;&#039; + &#039;&#039;&#039;2113&#039;&#039;&#039; = &#039;&#039;&#039;110316µs&#039;&#039;&#039;, or simply &#039;&#039;&#039;110ms&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;u&amp;gt;&#039;&#039;&#039;c.  Start-of-Line Method&#039;&#039;&#039;&amp;lt;/u&amp;gt;    This method relies entirely on the times shown at the start of each line in the waveform display.  First, stretch or shrink the width of the display to try and place the first point of interest precisely at the beginning of a line, where the time is known.  Scroll vertically to keep the point in sight as you keep changing display width to move it as close as possible to the start of any line.  Don&#039;t worry if you can&#039;t place it exactly, just get as close as you can.&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig10.png|frame|50px|center|Figure 10. First Point of Interest Aligned Near Start of Line 2548240]]&lt;br /&gt;
&lt;br /&gt;
::If you look at Figure 10 you can judge from nearby ON and OFF times that we&#039;ve been able to place the first point of interest within about &#039;&#039;&#039;100µs&#039;&#039;&#039; of the start of a line.  So we&#039;ll say the command starts at about &#039;&#039;&#039;2548240µs&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
::Now find the second point of interest and likewise adjust the display to place it at the start of a line.&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig11.png|frame|50px|center|Figure 11. Second Point of Interest Aligned Near Start of Line 2658320]]&lt;br /&gt;
&lt;br /&gt;
::In Figure 11 we were able to place the second point of interest fairly close to the start of a line, so we&#039;ll say the command ends at about &#039;&#039;&#039;2658320µs&#039;&#039;&#039;.  (NOTE: The point is actually a little beyond the start of the line, about half the width of one of those &#039;&#039;&#039;610µs&#039;&#039;&#039; OFF times in the line above.  If that bothers you, just add &#039;&#039;&#039;300µs&#039;&#039;&#039; to the ending time, making it &#039;&#039;&#039;2658620µs&#039;&#039;&#039;. instead of &#039;&#039;&#039;2658320µs&#039;&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
::Subtracting &#039;&#039;&#039;2548240µs&#039;&#039;&#039; from &#039;&#039;&#039;2658320µs&#039;&#039;&#039; (or &#039;&#039;&#039;2658620µs&#039;&#039;&#039;) gives 110ms as the length of the command.  This method may give an error of as much as 1ms because of the difficulty of placing events precisely at the start of a line, but that amount of error is negligible when working with infrared signals.&lt;br /&gt;
&lt;br /&gt;
=ADDING NOTES TO YOUR DATA=&lt;br /&gt;
The decode entry identifies a recorded button accurately, but a description such as &amp;quot;NEC1 Device 4 OBC 2 Hex BF&amp;quot; might not be of much help if you&#039;re searching for a particular recording you may have made a day or week ago.  You can avoid this problem by adding descriptive information to a saved waveform easily.&lt;br /&gt;
&lt;br /&gt;
Right-click on a selected (highlighted) entry in the decode area to drop down a menu, then Click on Add Note, to open the Decode Note Editor box. &lt;br /&gt;
[[File:AWFig11a.png|frame|50px|center]]&lt;br /&gt;
&lt;br /&gt;
Type your note in the box.  The note can be as long as you want, but for practical reasons it is recommended you limit it to what you will be able to see in the limited width of the Note column in the decode area. &lt;br /&gt;
[[File:AWFig11b.png|frame|50px|center]]&lt;br /&gt;
&lt;br /&gt;
If all of your note is not visible you can make the Note column wider by sliding the &#039;&#039;&#039;Misc&#039;&#039;&#039; column to the right until its right edge is just off-screen. &lt;br /&gt;
[[File:AWFig11c.png|frame|50px|center]]&lt;br /&gt;
&lt;br /&gt;
Be sure to save the recording AFTER adding or modifying a note, if you want the note to be part of the saved data.&lt;br /&gt;
&lt;br /&gt;
=KEEPING UP-TO-DATE WITH IRSCOPE=&lt;br /&gt;
The JP1 Forum is where &#039;&#039;&#039;IRScope&#039;&#039;&#039; software is maintained, including periodically releasing new protocols, tracking down bugs, etc.  Registration is free, and entitles you to post questions regarding not only &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; applications, but infrared control technology in general.  You can also freely download any of the vast collection of data files, instructions, etc. from the site.  There are many experts available to respond to your questions and offer advice.  You can join by going HERE.&lt;br /&gt;
&lt;br /&gt;
=BUILDING AN AIRWIDGET=&lt;br /&gt;
To appreciate the simplicity of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;, take a look at its schematic (Figure 12).   The main component is the Arduino Nano Microcomputer board.   If you are familiar with the Nano you may notice that we use only three of its 30 pins, and you may think the board is over-qualified for the job.  However, it was chosen because it is one of the least expensive and smallest microcomputer boards made.  When you shop around for this component remember that an &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; works just as well with Chinese clones of the Nano, most of which use a CH340 UART instead of the much more expensive FTDI brand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AIRWidget&#039;&#039;&#039; parts are available from electronics distributors such as Mouser and DigiKey as well as on-line from Amazon, eBay, and other sources.  The simplest form of &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; can be made using a solderless breadboard, which is fast and easy because it does not require the use of a soldering iron&lt;br /&gt;
[[File:AWFig12.jpg|frame|50px|center|Figure 12. Complete Schematic of AIRWidget]]&lt;br /&gt;
&lt;br /&gt;
A key component of the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; is the QSE159 optical sensor.  This 3-pin IC, about the size of a TO92 transistor, combines a very fast photo diode, a high-gain amplifier, a band-pass filter, and an output driver in an infrared-transparent, daylight-opaque package.  Its function is to count each carrier cycle of a remote&#039;s infrared emitter as it outputs the bursts of IR carrier whose timing encodes the data bits of the transmitted message.  The &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; sends a running total of the count to your PC over its USB connection at precise 100 uS intervals.   &lt;br /&gt;
&lt;br /&gt;
There are at least three different sizes of Solderless breadboards:  The full size, which is 6-1/2 inches long and has over 800 points; The half-size, which has 400 or more points;  And the mini, which has 130 or more points.     If you already own a half-size solderless breadboard, Figure 13 shows how you can use it.  The four jumper wires should be solid 20 or 22 gage, insulated or non-insulated.  This breadboard is fine for a quick-and-dirty trial, but is more than you need if you want to minimize the size of your &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; or package it in a small box.  &lt;br /&gt;
 &lt;br /&gt;
[[File:AWFig13.jpg|frame|50px|center|Figure 13.  &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; Built on Half-Size Solderless Breadboard]]&lt;br /&gt;
&lt;br /&gt;
A smaller &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; can be built using a Mini Solderless Breadboard (Figure 14).  These are sold as single units or in packs of five to eight units by Sparkfun, Adafruit, Pololu, Amazon, eBay, and other internet sources. &lt;br /&gt;
&lt;br /&gt;
[[File:AWFig14.jpg|thumb|upright=7|center| Figure 14. AIRWidget Built on Mini Solderless Breadboard]]&lt;br /&gt;
&lt;br /&gt;
Note that two of the wire jumpers are located beneath the Nano.   If you want to put the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; in a box you will find several sources of small plastic boxes on the internet, usually sold in small bunches.   You will have to use one that has inside dimensions of at least 1.5 &amp;quot; x 1.9&amp;quot; x .75&amp;quot; height.   Most mini&#039;s have hooks on two sides for linking multiple units together.  You can reduce the overall length and width another 0.1&amp;quot; if you have trouble fitting it within a box by cutting these off or filing them down.&lt;br /&gt;
&lt;br /&gt;
=INSTALLING THE FIRMWARE IN YOUR PC=&lt;br /&gt;
There are three software files that must be installed in your PC before you can use an &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
(1) &#039;&#039;&#039;Arduino IDE 1.8.13 or 1.8.19&#039;&#039;&#039;.  This is a sort of “do it all” software tool that can be used to create, edit, debug, compile, and upload sketches to an Arduino product, such as the &#039;&#039;&#039;Nano&#039;&#039;&#039;.  We use it only to upload the sketch.  It is possible you already have it installed in your PC.  If so, skip to paragraph (2).  If not, search for it online and follow the instructions given for downloading and installing it.  &lt;br /&gt;
&lt;br /&gt;
(2) &#039;&#039;&#039;AIRWidget v1.00&#039;&#039;&#039;.  This is the sketch you must upload into the Nano using the IDE.  With the IDE installed, go [https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=26621 HERE] to get started.  Download the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039; sketch and use &#039;&#039;&#039;IDE&#039;&#039;&#039; to upload it to the &#039;&#039;&#039;Nano&#039;&#039;&#039;.  Click on Tools to drop down a menu box, and make sure the following selections are listed.&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig14b.PNG|frame|50px|center]]&lt;br /&gt;
&lt;br /&gt;
(3) &#039;&#039;&#039;IRScope v3.05&#039;&#039;&#039;. This is the program you must install in your PC.&lt;br /&gt;
::Go [https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=26615 HERE]&lt;br /&gt;
::Click on the &#039;&#039;&#039;Download&#039;&#039;&#039; button.&lt;br /&gt;
::Click on the &#039;&#039;&#039;Extract&#039;&#039;&#039; all button.&lt;br /&gt;
::Enter your Arduino folder as destination for the extracted files.&lt;br /&gt;
::Make a shortcut that opens &#039;&#039;&#039;IRScope.exe&#039;&#039;&#039; in the Arduino folder.&lt;br /&gt;
&lt;br /&gt;
[[File:AWFig15.jpg|frame|50px|center|Figure 15. Opening Lines of AIRWidget Sketch]]&lt;br /&gt;
         &lt;br /&gt;
Figure 15 shows the first 29 lines of the 182-line sketch.  It has long been my wish that we could simplify this wonderful system that &#039;&#039;&#039;Kevin Timmerman&#039;&#039;&#039; gave us so many years ago for collecting data with an &#039;&#039;&#039;IR Widget&#039;&#039;&#039;.  I owe an enormous debt of gratitude to two people who made that possible:  &lt;br /&gt;
# a member of the Arduino Forum known only as &#039;&#039;&#039;6v6gt&#039;&#039;&#039;, who programmed the sketch for the &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;; and &lt;br /&gt;
# a member of the JP1 Forum known as &#039;&#039;&#039;mathdon&#039;&#039;&#039; (Graham Dixon), who updated &#039;&#039;&#039;IRScope&#039;&#039;&#039; software as needed to maintain compatibility with old hardware as well as the new &#039;&#039;&#039;AIRWidget&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IR_Scope_and_IR_Widget_User%27s_Guide&amp;diff=3410</id>
		<title>IR Scope and IR Widget User&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IR_Scope_and_IR_Widget_User%27s_Guide&amp;diff=3410"/>
		<updated>2025-11-23T00:13:56Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* TOMMY’S MACRO EXAMPLE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A PDF form of this topic can be found here[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=9696],&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Documentation written by Vicky, Tommy Tyler and Graham Dixon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
[[Image:irscope0.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
The IR Widget is a tool for recording signals transmitted from infrared remote controls. Its small optical detector probe is placed a few inches in front of a remote to capture the output signal. The Widget works by counting individual pulses of the remote&#039;s infrared LED. It measures carrier frequency and ON/OFF times of carrier bursts with very good accuracy. A Widget has the capacity to capture and display an almost unlimited number of records 1/2 second to 15 seconds in length.&lt;br /&gt;
&lt;br /&gt;
IRScope is the software that collects and displays the data from the Widget. IRScope provides a graphic display, similar to that of a digital storage oscilloscope, showing precise timing details of the signal. IRScope’s built-in decoder provides a complete descriptive analysis if the signal pattern is recognized. Graphic displays are drawn to exact scale, and can be zoomed, stretched, dragged, scrolled, and saved.&lt;br /&gt;
IRScope and an IR Widget are great tools for studying infrared signals. The IR Widget and IRScope were designed by Kevin Timmerman. Tommy Tyler enhanced the design and sells them. You can find Tommy Tyler&#039;s Store in the market place in the JP1 site. Graham Dixon (mathdon) took over development of IRScope and made some exciting enhancements that make the software a fantastic tool for anyone studying signals, even if they have not purchased a Widget.&lt;br /&gt;
&lt;br /&gt;
There are many ways to capture a signal for analysis. For instance, a JP1 user with a learning remote and interface cable, can capture signals with the remote and read them in via IR or RMIR. Many people find that procedure cumbersome. With a Widget, you can avoid the frustration of collecting learns in batches, the hassle of botched learns, and the confusion of figuring out what you put where.&lt;br /&gt;
A Widget can learn virtually all signals. Some signals are too complicated to be analyzed and stored by a JP1 remote, but a Widget doesn’t have these shortcomings.&lt;br /&gt;
&lt;br /&gt;
The Widget is an economical solution. It is a bargain when compared to other oscilloscope solutions. The Widget can be less expensive than purchasing a learning remote with a cable for data collection too.&lt;br /&gt;
The Widget is an IR collection tool; it doesn’t function as a remote. That is the one place where the JP1 remote with interface cable does have a huge advantage. You can use the learning remote to record the signals, and have a pretty cool remote that you can program with your PC using the JP1 tools. For a serious enthusiast, I’d recommend having both the Widget and a learning remote with cable interface!&lt;br /&gt;
&lt;br /&gt;
IRScope’s oscilloscope type representation of the infrared signal’s timing data can be very helpful when learning about infrared protocols. IRScope can acquire timing data from several different sources. This makes the software helpful even without a Widget. The signal can be captured by the Widget or the signals can be imported from UEI (JP1) remote type learns, Pronto type learns or raw timing data. IRScope provides a large variety of output. Signal information can be saved in IRScope’s .ict (Infrared Capture Text) files; the information can be exported as UEI learns, Pronto learns, Lintronic forms; and detailed Summary reports.&lt;br /&gt;
2&lt;br /&gt;
IRScope’s creates and reads .ict (Infrared Capture Text). Originally these files only recorded a single capture. Two of the new features that Graham has added, (allowing notes and saving multiple signals from several capture sessions in a single ict file), make ICT files a convenient way of documenting and organizing signal information. An ICT file holds all the timing data and any notes entered while collecting signals. The decode data is not saved in the ICT file; the signal is decoded each time the ICT file is opened. This method allows ICT decodes to be improved when new versions of decodeIR.dll become available. DecodeIR.dll is the decoder used with all the JP1 tools such as IR, RMIR, DecodeCCF and IRTool.&lt;br /&gt;
&lt;br /&gt;
IRScope is a powerful diagnostic tool. It is always nice to be able to see what is coming out of the remote. The waveform allows you to visually compare signals to see if the OEM and upgrade signals match. It is very useful in diagnosing macro problems, such as duration problems or programming errors. IRScope can also be useful in diagnosing a wide variety of upgrade issues.&lt;br /&gt;
&lt;br /&gt;
==Software Installation==&lt;br /&gt;
The IRScope software bundle contains everything except the Widget’s USB driver. IRScope can be downloaded from the &#039;&#039;&#039;File Section&amp;gt;Tools&amp;gt;Main&#039;&#039;&#039; in the JP1 forum.&lt;br /&gt;
&lt;br /&gt;
The bundle includes:&lt;br /&gt;
#IRScope.exe&lt;br /&gt;
#DecodeIR.dll&lt;br /&gt;
#Features of IRScope version. xxx .pdf. a document that describes the new features&lt;br /&gt;
#DecodeIR.html a document that gives specifications for various protocols.&lt;br /&gt;
#MakeHex.dll&lt;br /&gt;
#ExchangeIR.dll&lt;br /&gt;
&lt;br /&gt;
Unzip the download and place all six files in the same folder.&lt;br /&gt;
&lt;br /&gt;
IRScope requires version DecodeIR.dll v2.39 (or later) that is supplied in the download package.&lt;br /&gt;
Many of the JP1 tools use DecodeIR.dll, so you may have older versions on your PC. If you store your decodeIR.dll in a centralized Windows System folder so that the applications share the same dll, make sure that your system is using decodeIR.dll version 2.39 or later.&lt;br /&gt;
&lt;br /&gt;
==IR Widget Driver Installation==&lt;br /&gt;
The Widget’s driver is not bundled with IRScope, the driver is downloaded separately.&lt;br /&gt;
&lt;br /&gt;
The Widget requires version 2.04.06 (or later) of the FTDI USB driver. You can download version 2.06.00 from: http://www.ftdichip.com/Drivers/VCP.htm. If you have an older version in your PC (perhaps from using a USB JP1.2/3 (Flash) Interface) you must first uninstall it. You&#039;ll need a utility called CDMUninstallerGUI, which you can download from: http://www.ftdichip.com/Resources/Utilities.htm. The download includes a brief readme.html that explains how to use the uninstaller.&lt;br /&gt;
&lt;br /&gt;
The first time you plug in a Widget after uninstalling old drivers, Windows&#039; New Hardware Wizard will prompt you through new driver installation in two phases. First it installs a driver for the USB Serial Converter function of the Widget. Following that, it installs a driver for the USB Serial Port function of the Widget.&lt;br /&gt;
To verify that your driver installation is successful, open Device Manager and expand both the Ports (COM &amp;amp; LPT) list and the Universal Serial Bus controllers list. When you plug in the Widget, a new entry called USB Serial Port (COMx) will appear at the end of the Ports list, and simultaneously a new entry called USB Serial Converter will appear at the end of the Universal Serial Bus controllers list, as shown in Figure 1 on the following page.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope1.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 1. Device Manager Showing Typical Widget Device Recognition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IRScope should be able to Autodetect this port, but on some systems Autodetect does not work, and you may need to manually enter that COM port number in the Port field in IRScope’s main window.&lt;br /&gt;
&lt;br /&gt;
==Exploring the Main Screen==&lt;br /&gt;
[[Image:irscope2.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 2. Default Main Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Capturing a Signal&lt;br /&gt;
To capture a signal with your Widget, you will need to make sure the Port, Capture Duration and Hardware and Mode settings are set and then press the Capture button.&lt;br /&gt;
Port&lt;br /&gt;
A grayed-out Port box indicates that you cannot drop down the list of COM ports because IRScope has already found the correct USB port. However, if the Port number were enabled, as in Figure 2, it could mean that the AutoLocate feature is not working. In the Advanced menu make sure there is a check mark in front of AutoLocate Widget. Try closing and relaunching the program. If it still doesn’t automatically locate, manually find the COM port number in the device manger as you did when you verified your Widget driver installation. Type that COM number in the port field in IRScope’s main window.&lt;br /&gt;
Capture Duration&lt;br /&gt;
Shows the total length of a recording in milliseconds, starting when the Widget detects the beginning of a signal from the remote. The entry in this box must be an integer value between 500 and 15000 (1/2 second to 15 seconds). The default value of 700 mS is fine for capturing individual buttons, but must be increased to capture a macro. You will have 5 seconds to start sending a signal, and as soon as the signal is detected, IRScope will record infrared activity for the specified capture duration.&lt;br /&gt;
Hardware and Mode&lt;br /&gt;
When working with a Widget, ALWAYS leave this set on IR Widget Count!&lt;br /&gt;
Capture Button&lt;br /&gt;
The Capture button prepares the system to collect data. When you are all setup and ready to record a signal, click on Capture, point your remote at the Widget’s probe and press a remote button. If you wait longer than 5 seconds before starting transmission, the capture will abort with an error message. The default configuration is for the program to output an audible beep when you press Capture and start the five second clock. If you don&#039;t like beeps, check the Suppress Beeps option in the Advanced menu.&lt;br /&gt;
&lt;br /&gt;
SHOW WAVE FORM&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:irscope3a.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
If the show waveform box was checked, a waveform window will appear when the capture is finished. &lt;br /&gt;
&lt;br /&gt;
[[Image:irscope3.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 3. Waveform Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The waveform window is very useful in diagnosing problems, and creating custom protocols. The waveform in Figure 3 has been labeled to show what the various parts of a waveform represent. A brief description follows here. The Waveforms Explained section provides a more detailed description.&lt;br /&gt;
The top line of the waveform windows shows thumbnails. There are three options to control how the thumbnail line will be displayed. Under the Advanced menu, Thumbnail Scale you have the option of Fixed Resolution, Limited Duration and Entire Waveform. You should choose a Thumbnail Scale that best suits your activity.&lt;br /&gt;
The Frequency is in the upper corner. The frequency in Figure 3 is 39944hz. If a mixture of signals was captured, the frequency is not computed and instead &amp;lt; freq varies&amp;gt; is shown. Frequency is a measure of how many times the light flashed during the ON pulse time.&lt;br /&gt;
The waveform is completely scalable. If the timings are so close that the numbers are unreadable, you can click on the form and change the number of microseconds per pixel. You can also remove the pulse counts, those pulse times or the elapsed times.&lt;br /&gt;
The pulse times are the numbers below the line. You may be used to seeing pulse times with + and minus like +2400, -600, + 1200 –600 +600 when no waveform is available. The – was used to indicate the quite times, not to indicate a negative time.&lt;br /&gt;
If you don’t want to see the waveform on each capture uncheck the show waveform option. 6&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope4.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 4. Decode Grid and Action on Items Selected box&#039;&#039;&#039;&lt;br /&gt;
Decode Grid&lt;br /&gt;
The decode grid shows a list of decodes for the recorded signals. The grid has 11 sizeable columns, #, Frequency, Protocol, Device, OBC, Hex, Note, Miss, Start, End and Error. Depending on how the columns have been sized, some columns may be hidden. The grid allows single or multiple signal selections. Double click on a selection to open and or highlight its waveform.&lt;br /&gt;
In Figure 4, the grid entries for the highlighted signal show:&lt;br /&gt;
# 2. This shows the position this signal holds in the grid and ict files.&lt;br /&gt;
Frequency 37423. This shows the relation ship of the pulse count to the pulse time.&lt;br /&gt;
Protocol This shows which set of formatting rules the signal follows, in this case Panasonic.&lt;br /&gt;
Device 128.0 indicates a device of 128, sub-device 0 (note a zero and a blank are not the same)&lt;br /&gt;
OBC this is the function part of the signal. That is the part that changes with each key press.&lt;br /&gt;
Note this information is input by the user.&lt;br /&gt;
Hex codes for the specific button. NEVER USE THIS hex to create an upgrade. The hex you need to enter in RemoteMaster’s (RM) hex column may not match this hex!&lt;br /&gt;
Misc describes the repetition characteristics of the signal and other miscellaneous information.&lt;br /&gt;
No Repeat means the signal consisted of only one full frame. +N copies means the signal consisted of N+1 full frames. +N dittos means the signal consisted of one full frame followed by N ditto frames. Ditto frames consist of only a starting and ending burst but no data portion. Dittos frames are used to indicate that a button is being held down.&lt;br /&gt;
Start and End the numbers in the columns refer to carrier ON bursts in a signal, and are used only by experts when debugging decoding errors.&lt;br /&gt;
Error column is not used.&lt;br /&gt;
Action on Items Selected Box&lt;br /&gt;
All the buttons in this box work on the lines selected in the Decode Grid.&lt;br /&gt;
Add/Edit Note allows a label to be entered on the selected grid line. Add/Edit Note is how the “pause” and “play” descriptions got into the Note column.&lt;br /&gt;
UP and DOWN moves the selected signals in the decode grid.&lt;br /&gt;
DELETE deletes the selected signals from the decode grid.&lt;br /&gt;
EXPORT writes timing information in UEI Learns, Pronto Learns or Lintronic timing formats to a text file. See the Export menu and in the IRScope’s Output formats sections for more detailed information.&lt;br /&gt;
SAVE AS saves the timing data for the selected signals in an ICT (Infrared Control Timing) file.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope5.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 5. Signal structures and IRP Form&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Signal Structure&lt;br /&gt;
This gives general information about the selected signal.&lt;br /&gt;
IRP Form:&lt;br /&gt;
IRP notation is a way of describing the signal. The IRP Form displayed in IRScope is a generic IRP form. The portion shown as {A=} is a representation of the analyzed data portion of the signal. You can adjust the way A is displayed from the Advanced menu. If you want to understand the protocol rules, take a look at the official IRP for the protocol. To see the official IRP, select HELP and then select Interpreting Decoded IR Signals.&lt;br /&gt;
Generic IRP Form.&lt;br /&gt;
{37.4k,427,msb}&amp;lt;1,-1|1,-3&amp;gt;(8,-4,A:48,1,-73.5m)+{A=$400401008889}; Alt leadout form: ^127m&lt;br /&gt;
The official IRP for the Panasonic code looks like this.&lt;br /&gt;
{37k,432}&amp;lt;1,-1|1,-3&amp;gt;(8,-4,2:8,32:8,D:8,S:8,F:8,(D^S^F):8,1,-173)+&lt;br /&gt;
D is the device, S is the subdevice, and F is the OBC and the signal is lsb.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope6.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 6. Clear and Clear before capture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
CLEAR&lt;br /&gt;
The clear button will immediately delete everything from the decode grid, to delete selected lines use the Delete in the Action on Items Selected area.&lt;br /&gt;
Clear before Capture&lt;br /&gt;
If this option is checked, the contents of the decode grid will be erased every time you capture a new signal.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7a.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
SAVE ALL AS&lt;br /&gt;
Save All As, will save an ICT (Infrared Capture Text) file, that will includes all the signals in the decode grid. The Save As only saves the highlighted signals. ICT files that have a complete signal set are very a very convenient way to pass information.&lt;br /&gt;
VIEW&lt;br /&gt;
The view button allows you to open an ICT file and adds all the information into the decode grid.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 7. SUMMARY REPORT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
The summary button produces the report in figure 7. The DECODES portion of the report reproduces the decode grid from the main screen. This can be helpful if you need a hard copy to do your data entry in RM or KM. I like to copy and paste this data into a spreadsheet and manipulate it so that I don’t have to risk making data entry errors.&lt;br /&gt;
The RAW TIMINGS DATA and ANALYSED TIMING DATA portions can be useful if the signals couldn’t be decoded because they didn’t follow the rules for any known protocol.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope8.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 8, IRScope’s Import window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IMPORT&lt;br /&gt;
IRScope is also capable of importing signal in the form of Pronto Hex, Raw timing data and UEI learns. Select the import type; indicate the number of repeats to be displayed and paste the timing information into the area provided.&amp;lt;br&amp;gt;&lt;br /&gt;
Pronto Hex is a form of timing data that is used in high end Philips remotes. This is a convenient way to exchange information about IR signals. Many manufacturers post data in Pronto Hex format. Pronto users exchange information via pronto hex and in CCF files and PCF files containing their configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Pronto Hex looks like this.&amp;lt;br&amp;gt;&lt;br /&gt;
0000 006C 0032 0000 0080 003C 0010 000F 0010 000F 0010 002F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 002F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 34AC&amp;lt;br&amp;gt;&lt;br /&gt;
Raw Timing Data is another form of timing data often found. When using data you’ll need a frequency as well as the pulse times. If no frequency is available try 38000.&amp;lt;br&amp;gt;&lt;br /&gt;
+3414 -1686 +433 -421 +433 -1294 +406 -440 +433 -421 +433 -413 +433 -421 +433 -440 +406 -440 +433 -421 +433&lt;br /&gt;
-413 +433 -421 +433 -413 +433 -421 +433 -1294 +433 -413 +433 -421 +433 -413 +433 -421 +433 -440 +406 –440 +433 -421 +433 -413 +433 -421 +433 -1294 +406 -440 +433 -421 +433 -413 +433 -421 +433 -413 +433 -421 +433&lt;br /&gt;
-440 +406 -440 +433 -421 +433 -413 +433 -421 +433 -440 +406 -1294 +433 -421 +433 -413 +433 -421 +433 -413 +433 -421 +433 -440 +406 -440 +433 -1267 +433 -421 +433 -440 +406 -1294 +433 -73694&lt;br /&gt;
10&amp;lt;br&amp;gt;&lt;br /&gt;
UEI Learns&amp;lt;br&amp;gt;&lt;br /&gt;
The learns from a JP1 remote can be imported too. From IR or RMIR, edit the learned key and then copy the data portion of the learned command, and then paste it into the Import window in IRScope.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope9.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 9, Learned signal from IR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
JP1 people are pretty familiar with this screen. IR is the main JP1 program for downloading information from our remotes. Similar functionality is available in RMIR, the java based version of IR. IRScope can format and export UEI learns or Pronto learns. That exported data can be used to add learns to a JP1 remote.&lt;br /&gt;
&lt;br /&gt;
==Exploring the Menus==&lt;br /&gt;
File Menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
      &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Capture &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Capture is the same as the Capture button on screen&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Open &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Open is same as the View button on screen&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Import&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Import is same as Import button on screen.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Summary&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Creates as timing summary report, same as the summary button on screen&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save Last Signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the last signal captured with auto number naming.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Save Last Signal As&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the last signal captured but asks for a filename.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save Selected As&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the information for the signals selected in the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save All as&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves all the signals in the decode grid&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Set Folder &amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Set Save Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this option to set the folder where the ict files are to be saved.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;  Set Export Output Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This is the folder where exported files will be saved. If this option is grayed out, the Advanced menu’s Use Common Folder has been set and exported files will be written to the Save folder specified above.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Set IRP Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;IRP files are only needed to export Pronto hex in the Export Proto like decode mode. You don’t need these files to export Pronto hex from timings. These IRP definitions can be downloaded from the JP1 file section. Use this option to locate the folder where the IRP definition files are stored.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Clear Recent&amp;lt;/strong&amp;gt;&lt;br /&gt;
1 filename&amp;lt;br&amp;gt;&lt;br /&gt;
2 filename&amp;lt;br&amp;gt;&lt;br /&gt;
3 filename&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Clears the list of the last files accessed.&amp;lt;br&amp;gt;&lt;br /&gt;
IRScope saves the last 6 files accessed.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Exit&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Quits the program and closes all waveform windows.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
Edit menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Select All Ctrl+A&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Selects all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Deselect All Ctrl+D&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deselect all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Clear All&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deletes all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Add Note to Selected Ctrl+N&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This allows you to label each signal in the decode grid. This is an important feature when you are collecting a set of signals. These notes are used in the summary reports and in the export reports.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Move Selected Up Ctrl+Up&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Moves the selected items in the decode grid up.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Move Selected Down Ctrl+Dn&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Moves the selected items in the decode grid down.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Delete Selected Del&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deletes the selected items from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export Menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Last Signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Creates or appends to a file with the name ExportedUEI, ExportedPronto or ExportedLintronic.txt depending on the current Export Mode. The file will be created in the file Export Output Folder or the Common Save Folder. Exports the last signal captured in the mode selected.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Selected Ctrl+E&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Same as above, only this will export the signals selected in the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Mode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;  UEI Learned&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this option to create or append to a file named ExportedUEI.txt. The individual learns can be pasted into an ir file and uploaded into a learning remote.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Pronto from signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this to create or append to a file named ExportedPronto.txt file based on the actual timings.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Pronto from decode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This file will create or append to a file named ExportedPronto.txt file based on the protocols rules. To use this option you need to download the IRP files required for MakeHex and set the IRP folder. Use this option to create proto hex suitable for presentations.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Lintronic&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This file will appends to or creates an ExportedLincronic.txt file based on the actual timings.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advanced Menu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutosSave Types &amp;gt; &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;AutoSave saves every Widget capture automatically. New features in the software allow better options for saving signals. Saving a set is a better practice than using autosave.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;IR Capture Text (.ict)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Infrared Capture txt is one of the options for autosave. These are the IRScope files that can be reopened.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Audio(.wav)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This legacy format is only available in AutoSave mode from initial captures.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;TV-B-Gone (tvbg.c)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This legacy format is only available in AutoSave mode from initial captures.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutoSave Mode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Auto Filename&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option automatically generates a filename for the ict files. The default filename is consists of the letters IR followed by a 14-character date/time code in the format: [year] [month] [day] [hour] [minute] [second]. For example, IR20091212162102.ict&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Prompt for Filename&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option automatically saves every capture, but pauses to allow entry of a meaningful name for  each ict file.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutoLocate Widget&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This feature automatically finds which Com Port is assigned to the Widget.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Suppress Beeps&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;IRScope beeps when it is ready to start the capture unless the option is checked.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Hide Save-Panel &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;[[Image:irscope10a.jpg]] &lt;br /&gt;
     This option hides the Save panel. This panel duplicates the AutoSave Types and AutoSave Mode menu selections described above.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Thumbnail Scale&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;The options below control the way the thumbnails appear in the waveform window.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Fixed Resolution&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Fixed resolution always depicts the thumbnail on a 500ms scale.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Limited Duration&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Limited duration uses a variable scale that depicts the capture or the selected signal.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Entire Waveform&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Represents the entire capture time&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Select on Capture&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option causes the capture to be automatically selected in the decode grid after it is captured. This allows for speedier data entry on the notes field. Turn this option off to manually control which decode grid item is selected.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Common Output Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This features automatically saves Export files in the same folder as the Save Output folder. This option helps users working on multiple projects to keep their work organized.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; IRP Data Format&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option specifies for how the portion of the IRP form that represents the data {A=} will be displayed. In my example A is 32 bits of data.&amp;lt;br&amp;gt;&lt;br /&gt;
Sample IRP form:&amp;lt;br&amp;gt;&lt;br /&gt;
{39.0k,243,msb}&amp;lt;2,-5|2,-12&amp;gt;(35,-4262u,A:32,2,-33.5m)&lt;br /&gt;
+{A=$00D4C936}&lt;br /&gt;
Binary (base2 prefix 0b)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0b00000000110101001100100100110110}&amp;lt;br&amp;gt;&lt;br /&gt;
Quaternary (base 4, prefix0q)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0q0000311030210312}&amp;lt;br&amp;gt;&lt;br /&gt;
Hex (base 16 prefix 0x)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0x00D4C936}&amp;lt;br&amp;gt;&lt;br /&gt;
Hex (base 16, prefix $)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=$00D4C936}&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Disable Decoder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This disables the decoder and makes the decode grid disappear from the main screen. If you decode grid goes missing check this setting.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Help&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Interpreting IR Decodes&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option opens DecodeIR.HTM in your internet browser. DecodeIR, gives the information about the protocol rules used to decode the signals.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;About&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Displays the licensing and copyright information for IRScope. Note that on the software version numbers are not buried in the About box, they are already clearly displayed in the title bar of the main IRScope window.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exploring the Waveform==&lt;br /&gt;
[[Image:irscope3.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 10. Waveform Explained&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The waveform window is very useful in diagnosing problems and creating custom protocols. The waveform in Figure 10 has been labeled to show what the various parts of a waveform represent.&lt;br /&gt;
The waveform can be seen on capture; when you Open or View an ict file; or when you double click on a signal from the decode grid. When double clicking the decode grid, the portion of the waveform that represents the selected decodes will be highlighted in red.&lt;br /&gt;
The Frequency is in the upper corner. In Fig.10, the frequency is 39944hz. If a mixture of signals was captured, the frequency is not computed and instead &amp;lt; freq varies&amp;gt; is shown. Frequency is a measure of how many times the light flickered during an ON pulse time period.&lt;br /&gt;
The pulse times are the numbers below the line. You may be used to seeing pulse times with + and minus like +2400, -600, + 1200 –600 +600 when no waveform is available. The – was used to indicate the quite times, not to indicate a negative time.&lt;br /&gt;
Thumbnails The top line of the waveform windows shows thumbnails. There are three options to control how the thumbnail line will be displayed. Under the Advanced menu, Thumbnail Scale you have the option of Fixed Resolution, Limited Duration and Entire Waveform. Choose a thumbnail scale that suits your activity.&lt;br /&gt;
Fixed Resolution When the thumbnail scale is set to fixed resolution, the thumbnail will always represent 500mS. Fixed resolution is your best choice when comparing signals in different waveform windows.&lt;br /&gt;
Limited Duration When the thumbnail scale is set to limited duration, the thumbnail will be scaled to show the entire capture dropping any quiet time at the end of the signal. The thumbnail will shrink or expand depending on how long the infrared activity lasted.&lt;br /&gt;
&lt;br /&gt;
Entire Waveform When the thumbnail scale is set to entire waveform, the thumbnail will represent the capture duration including any quite time at the end.&lt;br /&gt;
Figure 11 shows the same capture showing in all three thumbnail scales. The capture duration was 1500ms, the infrared activity lasted only far less than the 500ms in the fixed.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope11.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 11. Thumbnail Scales&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Scalability. Another one of IRScope’s powerful features is the ability to change the resolution of the waveform. Not all signals will display well at the default 20 microseconds per pixel resolution. You can easily change this resolution to make the display more readable. You can also remove the pulse counts, pulse times and the elapsed time numbers from the display.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope12.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 12. IRScope Config Dialog Box&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 12 shows the scale of the timing chart as presently displayed. The default resolution is 20 microseconds per pixel. The microseconds per pixel can be set anywhere from 1 to 2000. Click OK, and the display instantly shrinks or expands to the new scale.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope13.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 13. Example of Waveforms Zoomed Out 5X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 13 shows a simple example where the zooming feature has been used. The waveform displays of signals for buttons &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, and &amp;quot;3&amp;quot; of an RCA remote have each been zoomed out to a resolution of 100 μS per pixel, then the windows were overlayed and lined up for comparison. Can you spot the subtle differences in timing between the three display patterns? Since all the carrier ON times are of uniform duration, and there are two sizes of OFF times, it&#039;s obvious this protocol encodes &amp;quot;1&amp;quot; and &amp;quot;0&amp;quot; bits by the amount of OFF time between carrier bursts.&lt;br /&gt;
The &amp;quot;1 button&amp;quot; example in Figure 13 typifies the appearance you get when you just zoom out on a signal. The numbers showing ON and OFF times etc. are still there, but they overlap too much to be readable except for some of the larger ON and OFF times. The three check boxes in the IRScope Config dialog box enable you to turn off one or more of these measurements when you want to see a cleaner picture. To illustrate the effect, I unchecked all three boxes when zooming out on the &amp;quot;2 button&amp;quot; and &amp;quot;3 button&amp;quot; waveforms. Zooming in and out is fast, but if you prefer you can also open more than one copy of the same waveform and zoom them out to different scales for simultaneous viewing while studying a signal.&lt;br /&gt;
When zooming, neither the size of the window nor the scale of the thumbnail display is changed. Only the scale of the waveform is expanded or contracted to show more or less detail. You can also stretch the overall width of a waveform display window to the full width of your screen, but that won&#039;t change the amount of detail shown. For an experiment, try stretching a display until the lines start at 0, 20000, 40000, 60000, etc. By doing this you have adjusted the display so that its width is exactly 20,000 μS, or 20 mS, a nice round number for estimating or measuring the position of various features.&lt;br /&gt;
&lt;br /&gt;
==IRScope&#039;s Output==&lt;br /&gt;
IRScope has a lot of output formats. The formats are ICT files, Summary Reports, ExportedUEI.txt, ExportedPronto.txt, and ExportedLintronix.txt files. There are also two old legacy formats, audio.(wav) and TV-B-Gone (tvbg.c).&lt;br /&gt;
ICT Infrared Capture Text&lt;br /&gt;
IRScope&#039;s primary file format is the ICT file. ICT files are the only type of files used for both input and output in IRScope. ICT files can be created with the Save As, Save All As buttons and with the Save Last, Save Last As, Save Selected and Save Selected As items on the File Menu. The files will be stored in the folder specified in with the Set Output Save Folder option in the File Menu. Any option that included “As” will prompt for a filename. The other save methods will use automatic file naming form, (IRyyyymmddhhmmss.ict).&lt;br /&gt;
ICT files can be opened with the View button from the screen, or with the Open command on the File menu.&lt;br /&gt;
Saved files are in text format, and have an extension of .ict. Figure 14 shows the initial portion of a typical .ict file.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope14.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 14. Portions of a Sample.ict File&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Figure 14, the numbers correspond to the timing numbers that appeared in the waveform.&lt;br /&gt;
A number preceded by a &amp;quot;+&amp;quot; symbol is the ON time in microseconds for a carrier burst, and the number following a comma is the number of carrier cycles that make up that burst. A number proceeded by a &amp;quot;-&amp;quot; symbol is the OFF time in microseconds between carrier bursts. As you can see, there is enough data in the .ict file to completely reproduce a graphic display. Decode data is not part of a saved file. When a saved file is recalled, the decoder reprocesses the data to decode it.&lt;br /&gt;
Any notes that were manually entered in the decode grid are also stored in the ict file. When the ict file is opened or viewed the note and decode will be added to the decode grid.&lt;br /&gt;
&lt;br /&gt;
Summary file&lt;br /&gt;
The summary file is an rtf (rich text format). This is an output only file. This report is created by pressing the Summary button on the screen, or selecting Summary from the File menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 15. Summary Report&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Exported files&lt;br /&gt;
IRScope can also export timing data in UEI format, Pronto Format, and Lintronic Format. These files are for output only. Each format type has its own predefined filename ExportedUEI.txt, ExportedPronto.txt, and ExportedLintronics.txt. These files will be automatically located in the folder specified for Set Export Output Folder, or if the Common Output Folder option is set on the Advanced menu, these will be located in the Set Save Output Folder. If the filename already exists, the signals will be appended to the existing file. To export, select signals in the decode grid and press the Export button on the screen. The format to be exported is controlled by the Export Mode option on the Export menu.&lt;br /&gt;
&lt;br /&gt;
Figures 16, 17 and 18 are examples of what the exported output looks like when viewed in notepad &lt;br /&gt;
&lt;br /&gt;
[[Image:irscope16.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 16. ExportedUEI.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope17.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 17. Sample ExportedPronto.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The hex in the ExportedPronto files could have been created either from the raw timing data, or from the decode. The difference is that in Pronto from decode mode, the timings will be adjusted to match the IRP definition. The Pronto from Decode option makes hex that is free from itty-bitty capture variations, but you should verify that the signal truly complies with the decode, since this method could either correct or distort the signal.&lt;br /&gt;
Hint: To make presentation worthy waveforms, export the pronto hex using the Pronto from Decode export mode. Then open the ExportedPronto.txt file in notepad. Copy the pronto hex for the signal from notepad and paste the data into IRScope’s Import window. This will make beautiful waveforms that use IRP timing data and don’t show any of the timing variations introduced during play and capture.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope18.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 18. Partial ExportedLintronic.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Legacy Formats&lt;br /&gt;
&lt;br /&gt;
IRScope can produce two other output only formats, Audio (.wav) files and TV-B-Gone (tvbg.c) files. These formats were available in the original IRScope, but support for these formats has not evolved as the enhancements were made to IRScope. These legacy formats are only available in AutoSave mode on capture&lt;br /&gt;
&lt;br /&gt;
==Tommy&#039;s Macro Example==&lt;br /&gt;
Solving problems with macros is much easier if you know exactly what is being transmitted and when. For an example I created a macro containing four commands on my URC6012 remote. I test fired it at the Widget to make sure I was getting multiple LED flashes, and based on that, I set the Capture Duration for 4000 mS. I also dropped down the Advanced menu and set the Thumbnail Scale to Entire Waveform.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope19.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 19. Example of Macro Waveform Display&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 19 shows the captured waveform display, and Figure 20 shows how IRScope has decoded the macro as four separate signals, as if you had pressed those four buttons individually. Each signal has a different carrier frequency, so the waveform display shows it as &amp;lt;freq varies&amp;gt;. The thumbnail shows the entire 4 seconds Capture Duration and, although you can&#039;t make out much detail, you can clearly see that it contains four signals. The main waveform display is only large enough to show the three frames of the first signal, which is only about 3% of the entire macro.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope20.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 20. Example of Decoded Macro&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are several ways to get a better look at the overall picture: You can zoom out, you can scroll through it, you can use the waveform selection tool, or you can use a combination of these. Zooming out is a good way to see the time delays between macro commands. Figure 21 shows the macro zoomed out to 590 μS per pixel.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope21.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 21. Example of Figure 19 After Zooming Out to 590 μS Per Pixel&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Why did I select 590 μS per pixel? Note that in Figure 21 the last full line we can see starts at 135740 μS. So if we want to compress (zoom out on) the entire 4000 mS recording so it appears in that same space, we need to multiply the default resolution by 4000000 μS /135740 μS, or 29.5. So I double-clicked on the waveform display and changed the resolution from 20 microseconds per pixel to (29.5 x 20) = 590 microseconds per pixel.&lt;br /&gt;
At this scale you can easily see the time delay between the four commands, shown as 1,057,830, 1,061,373, and 1,057,737 μS. (To be scientifically correct, you should express these and all other IRScope measurements to only three significant figures, such as 1.06 seconds, in consideration of the limit of their accuracy.) Other types of remotes might repeat the signals a different number of times, or separate the commands by more or less time, because macro specifications are not chiseled in stone. One reason people like to use Extenders is that they often reduce the delay between commands to speed up macro execution.&lt;br /&gt;
If you are working with a large screen monitor and you really want to see this macro as one gigantic picture, here&#039;s the way to do it. After stretching the width and height of the window until it completely filled my screen, I noted that the bottom line started at 462000 μS. Dividing the overall macro Capture Duration, 4000000, by 462000 and multiplying by 20 μS per pixel gives 173 μS per pixel as my new resolution.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope22.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 22. Macro of Figure 21 Expanded and Zoomed to Fill the Screen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 22 shows the entire waveform display at this resolution, although the page is not really large enough to show it as well as it looks on a screen twice this size.&lt;br /&gt;
Another easy way to examine a macro is with the waveform selection tool. Even though there is only one waveform display, selecting a signal for viewing is done the same way as with individual recordings. Just click on one of the four lines in the decode area and the macro waveform display will instantly scroll to that signal and highlight it in red.&lt;br /&gt;
You will find that the measurement of carrier frequency and timing may not be quite as accurate when working with a macro. However, these errors are still well within the acceptable range of operation for the infrared receivers used in consumer devices. If you want more accurate measurements for one of the signals, capture a sample of that signal alone.&lt;br /&gt;
&lt;br /&gt;
==Vicky&#039;s Protocol Example==&lt;br /&gt;
IRScope is a great companion for Protocol Builder (PB). PB is a Microsoft Excel spreadsheet that can create executors to handle oddball signals for our JP1 remotes. Getting the remote to produce the desired signal can be a challenge. IRScope’s waveform takes the guesswork out of the process since visual comparisons can ensure that the executor’s signal matches the OEM signal.&lt;br /&gt;
IRScope is a great tool for debugging user upgrade problems too. Sometimes the user does everything right and the dang thing still won’t operate the equipment. Sometimes you actually need to see the signals to diagnose a problem.&lt;br /&gt;
DecodeIR, IRScope’s decoding module, does some magical mathematical gymnastics to identify the various signals. Usually an unknown signal is identified as a Gap protocol or Unknown protocol. Occasionally the signal follows enough of the protocols rules to be misidentified.&lt;br /&gt;
In my example, the OEM learns work, but the NEC2 upgrade, made from the decodes, did not work. All of the user’s files looked okay. I transferred the user’s learn to my remote, and captured the signal. I then loaded the upgrade into my remote, and captured the signal. On the surface everything looks good, but the user had reported that the signals don’t work.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope23.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 23: OEM Signal works, NEC2 Upgrade does not&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Looking at the Decode Grid you see that the device, subdevice and OBC all match. You might notice the small difference in frequency, but that is insignificant. Most devices tolerate frequency differences of +1000 or -1000 or more without any issue, so the tiny frequency difference shown in fig.23, is not the cause of our problems.&lt;br /&gt;
My first order of business is to make sure that I have my thumbnail scale to Fixed Resolution. This will set the thumbnail scale to be equal on all signals, regardless of the sample size. Both Limited Duration and Entire Waveform Thumbnails use arbitrary time lines and so thumbnails of different durations cause the thumbnails to be distorted so they can’t be easily compared.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope24.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 24. Limited Duration and Fixed Duration thumbnails.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Figure 24, the Limited Duration makes the signals look more alike than they really are. The Fixed Resolution shows the signals on the same time scale.&lt;br /&gt;
IRScope’s thumbnail comparisons can quickly point out problems. Certain signal problems have different characteristics. For instance, if the lead out time (the time between first frame and the second frame) is too long or too short, it can cause the repeat frames to be treated as new key presses, so a press of “1” might show up as “11”. In this user’s situation, the signals don’t didn’t work at all. When upgrade signals work, the thumbnails look like the thumbnails from the OEM signal. Remember, an IR signal is a timed light pattern, the timing is important. If you look at the Fixed Resolution thumbnails in fig. 24, you can easily see that the timings of the two samples are very different.&lt;br /&gt;
Most equipment is pretty forgiving when it comes to small variations in pulse times, but no equipment is going to recognize signals that are this far off. We’re going to need a custom protocol here.&lt;br /&gt;
&lt;br /&gt;
If the thumbnails had not made the problem so evident, I would have looked for more subtle timing problems by comparing the detail portion of the waveform. The OEM signal waveform, Figure 25, shows a typical variance in the pulse timings. We need to do some rounding here to get numbers we can work with. Generally timings with values within 50uS are considered to be equal.&lt;br /&gt;
When building a protocol executor in Protocol Builder (PB), I would use the rounded timings from the waveform to create an executor. I would use the following values to create the OEM signal shown in fig.25.&amp;lt;br&amp;gt;&lt;br /&gt;
Lead-In Pair= + 8500, -4250&amp;lt;br&amp;gt;&lt;br /&gt;
Zero = +500, -1250&amp;lt;br&amp;gt;&lt;br /&gt;
One = +500, -3000&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope25.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 25. OEM Signal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The official NEC2 IRP shows times in multiples of 564.&lt;br /&gt;
Nec2 IRP notation: {38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&lt;br /&gt;
Our IRP for the OEM signal, will be show times in a multiples of 500.&lt;br /&gt;
If you are comfortable with IRP, you could do the computation and see how different these signals timings are.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Official Nec2&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8824, -4412&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+564, -564&amp;lt;br&amp;gt;&lt;br /&gt;
One= +564, -1692&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The OEM signal (fig.25)&amp;lt;br&amp;gt;&lt;br /&gt;
Lead-In Pair=+ 8500, -4250&amp;lt;br&amp;gt;&lt;br /&gt;
Zero= +500, -1250&amp;lt;br&amp;gt;&lt;br /&gt;
One =+ 500, -3000&amp;lt;br&amp;gt;&lt;br /&gt;
IRP: {38.4k,500}&amp;lt;1,-2.5|1,-6&amp;gt;(17,-8.5,D:8,S:8,F:8,~F:8,1,-67)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
[[Image:irscope26.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 26, shows the pulse times when an upgrade is using the NEC2 executor.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For figure 26, I would round the timings to:&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br&amp;gt;&lt;br /&gt;
Compared side by side, you can see that the NEC2 signal from the upgrade complies with the official &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;NEC2 IRP. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Official Nec2 times&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8824, -4412&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+564, -564&amp;lt;br&amp;gt;&lt;br /&gt;
One= +564, -1692&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The Nec Upgrade signal fig(26)&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,550}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
[[Image:irscope26.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 26. NEC2 Upgrade Signal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with IRP, you could just compare the rounded timing values from both the OEM signal’s waveform in Figure 25, and the NEC2 upgrade signal in Figure 26.&lt;br /&gt;
Compared side by side, you can see how much different the timings are.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The Nec2 Upgrade signals (fig.26)&amp;lt;br /&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br /&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br /&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The OEM signal (fig.25)&amp;lt;br /&amp;gt;&lt;br /&gt;
Lead-In Pair=+ 8500, -4250&amp;lt;br /&amp;gt;&lt;br /&gt;
Zero= +500, -1250&amp;lt;br /&amp;gt;&lt;br /&gt;
One =+ 500, -3000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently the OEM signal followed enough of the Nec2 protocol rules to fool decodeIR, but it is not nearly close enough to operate the equipment. The upgrade can’t use the NEC2 protocol. Instead a custom protocol executor would be written. An executor to send a signal like this, with such simple formatting rules, can be easily created by filling in the fields in a Protocol Builder spreadsheet. No additional assembly language programming would be necessary.&lt;br /&gt;
After building the executor, I test the executor by shooting the signals at the Widget. Then I adjust settings as necessary to get the details as close to the OEM signals as possible. This assures that the equipment will respond reliably to upgrades created with the new executor.&lt;br /&gt;
To learn more about IRP I recommend reading the Infrared Protocol Primer.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&#039;&#039;&#039;Why doesn’t my IRScope Window have a decode grid?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
You may have disabled decodeIR. In the Advanced menu, uncheck Disable DecodeIR.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why am I getting a file creation error when saving or exporting?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Make sure that the Set Save Folder and the Set Export Folder in the File menu have been set to valid directories and that you are not trying to store them directly in the root directory.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When trying to launch IRScope I get a message “Could not open File”.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
IRScope only allows one session to run at a time. This message usually indicates IRScope is already running in another window. If that does not seem to be the case, confirm that by checking the &lt;br /&gt;
Applications Tab of the Windows Task Manger.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why can’t I export Pronto Hex when in “Pronto from decode” mode?&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The Pronto from decode mode only uses known protocols. If an unknown protocol is selected nothing will be exported, try the Pronto from timings mode instead.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I started IRScope, but I can’t find it.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Many settings are preserved between sessions using registry settings. Screen location is one of those settings. Use Windows Task Manager to switch to IRScope and then check the perimeters of the screen to see if you have moved IRScope to the edge and drag it back where you want it.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRScope stores its registry settings in HKEY_CURRENT_USER/Software/UEIC/IRScope/Settings &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COMMENTS AND SUGGESTIONS:&#039;&#039;&#039; Suggestions for additions or corrections to these instructions are&lt;br /&gt;
welcomed and should be posted to the forum.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IR_Scope_and_IR_Widget_User%27s_Guide&amp;diff=3409</id>
		<title>IR Scope and IR Widget User&#039;s Guide</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IR_Scope_and_IR_Widget_User%27s_Guide&amp;diff=3409"/>
		<updated>2025-11-23T00:13:28Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A PDF form of this topic can be found here[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=9696],&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Documentation written by Vicky, Tommy Tyler and Graham Dixon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
[[Image:irscope0.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
The IR Widget is a tool for recording signals transmitted from infrared remote controls. Its small optical detector probe is placed a few inches in front of a remote to capture the output signal. The Widget works by counting individual pulses of the remote&#039;s infrared LED. It measures carrier frequency and ON/OFF times of carrier bursts with very good accuracy. A Widget has the capacity to capture and display an almost unlimited number of records 1/2 second to 15 seconds in length.&lt;br /&gt;
&lt;br /&gt;
IRScope is the software that collects and displays the data from the Widget. IRScope provides a graphic display, similar to that of a digital storage oscilloscope, showing precise timing details of the signal. IRScope’s built-in decoder provides a complete descriptive analysis if the signal pattern is recognized. Graphic displays are drawn to exact scale, and can be zoomed, stretched, dragged, scrolled, and saved.&lt;br /&gt;
IRScope and an IR Widget are great tools for studying infrared signals. The IR Widget and IRScope were designed by Kevin Timmerman. Tommy Tyler enhanced the design and sells them. You can find Tommy Tyler&#039;s Store in the market place in the JP1 site. Graham Dixon (mathdon) took over development of IRScope and made some exciting enhancements that make the software a fantastic tool for anyone studying signals, even if they have not purchased a Widget.&lt;br /&gt;
&lt;br /&gt;
There are many ways to capture a signal for analysis. For instance, a JP1 user with a learning remote and interface cable, can capture signals with the remote and read them in via IR or RMIR. Many people find that procedure cumbersome. With a Widget, you can avoid the frustration of collecting learns in batches, the hassle of botched learns, and the confusion of figuring out what you put where.&lt;br /&gt;
A Widget can learn virtually all signals. Some signals are too complicated to be analyzed and stored by a JP1 remote, but a Widget doesn’t have these shortcomings.&lt;br /&gt;
&lt;br /&gt;
The Widget is an economical solution. It is a bargain when compared to other oscilloscope solutions. The Widget can be less expensive than purchasing a learning remote with a cable for data collection too.&lt;br /&gt;
The Widget is an IR collection tool; it doesn’t function as a remote. That is the one place where the JP1 remote with interface cable does have a huge advantage. You can use the learning remote to record the signals, and have a pretty cool remote that you can program with your PC using the JP1 tools. For a serious enthusiast, I’d recommend having both the Widget and a learning remote with cable interface!&lt;br /&gt;
&lt;br /&gt;
IRScope’s oscilloscope type representation of the infrared signal’s timing data can be very helpful when learning about infrared protocols. IRScope can acquire timing data from several different sources. This makes the software helpful even without a Widget. The signal can be captured by the Widget or the signals can be imported from UEI (JP1) remote type learns, Pronto type learns or raw timing data. IRScope provides a large variety of output. Signal information can be saved in IRScope’s .ict (Infrared Capture Text) files; the information can be exported as UEI learns, Pronto learns, Lintronic forms; and detailed Summary reports.&lt;br /&gt;
2&lt;br /&gt;
IRScope’s creates and reads .ict (Infrared Capture Text). Originally these files only recorded a single capture. Two of the new features that Graham has added, (allowing notes and saving multiple signals from several capture sessions in a single ict file), make ICT files a convenient way of documenting and organizing signal information. An ICT file holds all the timing data and any notes entered while collecting signals. The decode data is not saved in the ICT file; the signal is decoded each time the ICT file is opened. This method allows ICT decodes to be improved when new versions of decodeIR.dll become available. DecodeIR.dll is the decoder used with all the JP1 tools such as IR, RMIR, DecodeCCF and IRTool.&lt;br /&gt;
&lt;br /&gt;
IRScope is a powerful diagnostic tool. It is always nice to be able to see what is coming out of the remote. The waveform allows you to visually compare signals to see if the OEM and upgrade signals match. It is very useful in diagnosing macro problems, such as duration problems or programming errors. IRScope can also be useful in diagnosing a wide variety of upgrade issues.&lt;br /&gt;
&lt;br /&gt;
==Software Installation==&lt;br /&gt;
The IRScope software bundle contains everything except the Widget’s USB driver. IRScope can be downloaded from the &#039;&#039;&#039;File Section&amp;gt;Tools&amp;gt;Main&#039;&#039;&#039; in the JP1 forum.&lt;br /&gt;
&lt;br /&gt;
The bundle includes:&lt;br /&gt;
#IRScope.exe&lt;br /&gt;
#DecodeIR.dll&lt;br /&gt;
#Features of IRScope version. xxx .pdf. a document that describes the new features&lt;br /&gt;
#DecodeIR.html a document that gives specifications for various protocols.&lt;br /&gt;
#MakeHex.dll&lt;br /&gt;
#ExchangeIR.dll&lt;br /&gt;
&lt;br /&gt;
Unzip the download and place all six files in the same folder.&lt;br /&gt;
&lt;br /&gt;
IRScope requires version DecodeIR.dll v2.39 (or later) that is supplied in the download package.&lt;br /&gt;
Many of the JP1 tools use DecodeIR.dll, so you may have older versions on your PC. If you store your decodeIR.dll in a centralized Windows System folder so that the applications share the same dll, make sure that your system is using decodeIR.dll version 2.39 or later.&lt;br /&gt;
&lt;br /&gt;
==IR Widget Driver Installation==&lt;br /&gt;
The Widget’s driver is not bundled with IRScope, the driver is downloaded separately.&lt;br /&gt;
&lt;br /&gt;
The Widget requires version 2.04.06 (or later) of the FTDI USB driver. You can download version 2.06.00 from: http://www.ftdichip.com/Drivers/VCP.htm. If you have an older version in your PC (perhaps from using a USB JP1.2/3 (Flash) Interface) you must first uninstall it. You&#039;ll need a utility called CDMUninstallerGUI, which you can download from: http://www.ftdichip.com/Resources/Utilities.htm. The download includes a brief readme.html that explains how to use the uninstaller.&lt;br /&gt;
&lt;br /&gt;
The first time you plug in a Widget after uninstalling old drivers, Windows&#039; New Hardware Wizard will prompt you through new driver installation in two phases. First it installs a driver for the USB Serial Converter function of the Widget. Following that, it installs a driver for the USB Serial Port function of the Widget.&lt;br /&gt;
To verify that your driver installation is successful, open Device Manager and expand both the Ports (COM &amp;amp; LPT) list and the Universal Serial Bus controllers list. When you plug in the Widget, a new entry called USB Serial Port (COMx) will appear at the end of the Ports list, and simultaneously a new entry called USB Serial Converter will appear at the end of the Universal Serial Bus controllers list, as shown in Figure 1 on the following page.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope1.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 1. Device Manager Showing Typical Widget Device Recognition&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IRScope should be able to Autodetect this port, but on some systems Autodetect does not work, and you may need to manually enter that COM port number in the Port field in IRScope’s main window.&lt;br /&gt;
&lt;br /&gt;
==Exploring the Main Screen==&lt;br /&gt;
[[Image:irscope2.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 2. Default Main Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Capturing a Signal&lt;br /&gt;
To capture a signal with your Widget, you will need to make sure the Port, Capture Duration and Hardware and Mode settings are set and then press the Capture button.&lt;br /&gt;
Port&lt;br /&gt;
A grayed-out Port box indicates that you cannot drop down the list of COM ports because IRScope has already found the correct USB port. However, if the Port number were enabled, as in Figure 2, it could mean that the AutoLocate feature is not working. In the Advanced menu make sure there is a check mark in front of AutoLocate Widget. Try closing and relaunching the program. If it still doesn’t automatically locate, manually find the COM port number in the device manger as you did when you verified your Widget driver installation. Type that COM number in the port field in IRScope’s main window.&lt;br /&gt;
Capture Duration&lt;br /&gt;
Shows the total length of a recording in milliseconds, starting when the Widget detects the beginning of a signal from the remote. The entry in this box must be an integer value between 500 and 15000 (1/2 second to 15 seconds). The default value of 700 mS is fine for capturing individual buttons, but must be increased to capture a macro. You will have 5 seconds to start sending a signal, and as soon as the signal is detected, IRScope will record infrared activity for the specified capture duration.&lt;br /&gt;
Hardware and Mode&lt;br /&gt;
When working with a Widget, ALWAYS leave this set on IR Widget Count!&lt;br /&gt;
Capture Button&lt;br /&gt;
The Capture button prepares the system to collect data. When you are all setup and ready to record a signal, click on Capture, point your remote at the Widget’s probe and press a remote button. If you wait longer than 5 seconds before starting transmission, the capture will abort with an error message. The default configuration is for the program to output an audible beep when you press Capture and start the five second clock. If you don&#039;t like beeps, check the Suppress Beeps option in the Advanced menu.&lt;br /&gt;
&lt;br /&gt;
SHOW WAVE FORM&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:irscope3a.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
If the show waveform box was checked, a waveform window will appear when the capture is finished. &lt;br /&gt;
&lt;br /&gt;
[[Image:irscope3.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 3. Waveform Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The waveform window is very useful in diagnosing problems, and creating custom protocols. The waveform in Figure 3 has been labeled to show what the various parts of a waveform represent. A brief description follows here. The Waveforms Explained section provides a more detailed description.&lt;br /&gt;
The top line of the waveform windows shows thumbnails. There are three options to control how the thumbnail line will be displayed. Under the Advanced menu, Thumbnail Scale you have the option of Fixed Resolution, Limited Duration and Entire Waveform. You should choose a Thumbnail Scale that best suits your activity.&lt;br /&gt;
The Frequency is in the upper corner. The frequency in Figure 3 is 39944hz. If a mixture of signals was captured, the frequency is not computed and instead &amp;lt; freq varies&amp;gt; is shown. Frequency is a measure of how many times the light flashed during the ON pulse time.&lt;br /&gt;
The waveform is completely scalable. If the timings are so close that the numbers are unreadable, you can click on the form and change the number of microseconds per pixel. You can also remove the pulse counts, those pulse times or the elapsed times.&lt;br /&gt;
The pulse times are the numbers below the line. You may be used to seeing pulse times with + and minus like +2400, -600, + 1200 –600 +600 when no waveform is available. The – was used to indicate the quite times, not to indicate a negative time.&lt;br /&gt;
If you don’t want to see the waveform on each capture uncheck the show waveform option. 6&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope4.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 4. Decode Grid and Action on Items Selected box&#039;&#039;&#039;&lt;br /&gt;
Decode Grid&lt;br /&gt;
The decode grid shows a list of decodes for the recorded signals. The grid has 11 sizeable columns, #, Frequency, Protocol, Device, OBC, Hex, Note, Miss, Start, End and Error. Depending on how the columns have been sized, some columns may be hidden. The grid allows single or multiple signal selections. Double click on a selection to open and or highlight its waveform.&lt;br /&gt;
In Figure 4, the grid entries for the highlighted signal show:&lt;br /&gt;
# 2. This shows the position this signal holds in the grid and ict files.&lt;br /&gt;
Frequency 37423. This shows the relation ship of the pulse count to the pulse time.&lt;br /&gt;
Protocol This shows which set of formatting rules the signal follows, in this case Panasonic.&lt;br /&gt;
Device 128.0 indicates a device of 128, sub-device 0 (note a zero and a blank are not the same)&lt;br /&gt;
OBC this is the function part of the signal. That is the part that changes with each key press.&lt;br /&gt;
Note this information is input by the user.&lt;br /&gt;
Hex codes for the specific button. NEVER USE THIS hex to create an upgrade. The hex you need to enter in RemoteMaster’s (RM) hex column may not match this hex!&lt;br /&gt;
Misc describes the repetition characteristics of the signal and other miscellaneous information.&lt;br /&gt;
No Repeat means the signal consisted of only one full frame. +N copies means the signal consisted of N+1 full frames. +N dittos means the signal consisted of one full frame followed by N ditto frames. Ditto frames consist of only a starting and ending burst but no data portion. Dittos frames are used to indicate that a button is being held down.&lt;br /&gt;
Start and End the numbers in the columns refer to carrier ON bursts in a signal, and are used only by experts when debugging decoding errors.&lt;br /&gt;
Error column is not used.&lt;br /&gt;
Action on Items Selected Box&lt;br /&gt;
All the buttons in this box work on the lines selected in the Decode Grid.&lt;br /&gt;
Add/Edit Note allows a label to be entered on the selected grid line. Add/Edit Note is how the “pause” and “play” descriptions got into the Note column.&lt;br /&gt;
UP and DOWN moves the selected signals in the decode grid.&lt;br /&gt;
DELETE deletes the selected signals from the decode grid.&lt;br /&gt;
EXPORT writes timing information in UEI Learns, Pronto Learns or Lintronic timing formats to a text file. See the Export menu and in the IRScope’s Output formats sections for more detailed information.&lt;br /&gt;
SAVE AS saves the timing data for the selected signals in an ICT (Infrared Control Timing) file.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope5.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 5. Signal structures and IRP Form&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Signal Structure&lt;br /&gt;
This gives general information about the selected signal.&lt;br /&gt;
IRP Form:&lt;br /&gt;
IRP notation is a way of describing the signal. The IRP Form displayed in IRScope is a generic IRP form. The portion shown as {A=} is a representation of the analyzed data portion of the signal. You can adjust the way A is displayed from the Advanced menu. If you want to understand the protocol rules, take a look at the official IRP for the protocol. To see the official IRP, select HELP and then select Interpreting Decoded IR Signals.&lt;br /&gt;
Generic IRP Form.&lt;br /&gt;
{37.4k,427,msb}&amp;lt;1,-1|1,-3&amp;gt;(8,-4,A:48,1,-73.5m)+{A=$400401008889}; Alt leadout form: ^127m&lt;br /&gt;
The official IRP for the Panasonic code looks like this.&lt;br /&gt;
{37k,432}&amp;lt;1,-1|1,-3&amp;gt;(8,-4,2:8,32:8,D:8,S:8,F:8,(D^S^F):8,1,-173)+&lt;br /&gt;
D is the device, S is the subdevice, and F is the OBC and the signal is lsb.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope6.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 6. Clear and Clear before capture&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
CLEAR&lt;br /&gt;
The clear button will immediately delete everything from the decode grid, to delete selected lines use the Delete in the Action on Items Selected area.&lt;br /&gt;
Clear before Capture&lt;br /&gt;
If this option is checked, the contents of the decode grid will be erased every time you capture a new signal.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7a.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
SAVE ALL AS&lt;br /&gt;
Save All As, will save an ICT (Infrared Capture Text) file, that will includes all the signals in the decode grid. The Save As only saves the highlighted signals. ICT files that have a complete signal set are very a very convenient way to pass information.&lt;br /&gt;
VIEW&lt;br /&gt;
The view button allows you to open an ICT file and adds all the information into the decode grid.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FIGURE 7. SUMMARY REPORT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
The summary button produces the report in figure 7. The DECODES portion of the report reproduces the decode grid from the main screen. This can be helpful if you need a hard copy to do your data entry in RM or KM. I like to copy and paste this data into a spreadsheet and manipulate it so that I don’t have to risk making data entry errors.&lt;br /&gt;
The RAW TIMINGS DATA and ANALYSED TIMING DATA portions can be useful if the signals couldn’t be decoded because they didn’t follow the rules for any known protocol.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope8.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 8, IRScope’s Import window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IMPORT&lt;br /&gt;
IRScope is also capable of importing signal in the form of Pronto Hex, Raw timing data and UEI learns. Select the import type; indicate the number of repeats to be displayed and paste the timing information into the area provided.&amp;lt;br&amp;gt;&lt;br /&gt;
Pronto Hex is a form of timing data that is used in high end Philips remotes. This is a convenient way to exchange information about IR signals. Many manufacturers post data in Pronto Hex format. Pronto users exchange information via pronto hex and in CCF files and PCF files containing their configurations.&amp;lt;br&amp;gt;&lt;br /&gt;
Pronto Hex looks like this.&amp;lt;br&amp;gt;&lt;br /&gt;
0000 006C 0032 0000 0080 003C 0010 000F 0010 000F 0010 002F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 002F 0010 002F 0010 000F 0010 000F 0010 000F 0010 002F 0010 000F 0010 002F 0010 000F 0010 000F 0010 002F 0010 000F 0010 000F 0010 000F 0010 34AC&amp;lt;br&amp;gt;&lt;br /&gt;
Raw Timing Data is another form of timing data often found. When using data you’ll need a frequency as well as the pulse times. If no frequency is available try 38000.&amp;lt;br&amp;gt;&lt;br /&gt;
+3414 -1686 +433 -421 +433 -1294 +406 -440 +433 -421 +433 -413 +433 -421 +433 -440 +406 -440 +433 -421 +433&lt;br /&gt;
-413 +433 -421 +433 -413 +433 -421 +433 -1294 +433 -413 +433 -421 +433 -413 +433 -421 +433 -440 +406 –440 +433 -421 +433 -413 +433 -421 +433 -1294 +406 -440 +433 -421 +433 -413 +433 -421 +433 -413 +433 -421 +433&lt;br /&gt;
-440 +406 -440 +433 -421 +433 -413 +433 -421 +433 -440 +406 -1294 +433 -421 +433 -413 +433 -421 +433 -413 +433 -421 +433 -440 +406 -440 +433 -1267 +433 -421 +433 -440 +406 -1294 +433 -73694&lt;br /&gt;
10&amp;lt;br&amp;gt;&lt;br /&gt;
UEI Learns&amp;lt;br&amp;gt;&lt;br /&gt;
The learns from a JP1 remote can be imported too. From IR or RMIR, edit the learned key and then copy the data portion of the learned command, and then paste it into the Import window in IRScope.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope9.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 9, Learned signal from IR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
JP1 people are pretty familiar with this screen. IR is the main JP1 program for downloading information from our remotes. Similar functionality is available in RMIR, the java based version of IR. IRScope can format and export UEI learns or Pronto learns. That exported data can be used to add learns to a JP1 remote.&lt;br /&gt;
&lt;br /&gt;
==Exploring the Menus==&lt;br /&gt;
File Menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
      &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Capture &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Capture is the same as the Capture button on screen&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Open &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Open is same as the View button on screen&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Import&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Import is same as Import button on screen.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Summary&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Creates as timing summary report, same as the summary button on screen&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save Last Signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the last signal captured with auto number naming.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Save Last Signal As&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the last signal captured but asks for a filename.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save Selected As&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves the information for the signals selected in the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Save All as&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Saves all the signals in the decode grid&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Set Folder &amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Set Save Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this option to set the folder where the ict files are to be saved.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;  Set Export Output Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This is the folder where exported files will be saved. If this option is grayed out, the Advanced menu’s Use Common Folder has been set and exported files will be written to the Save folder specified above.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Set IRP Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;IRP files are only needed to export Pronto hex in the Export Proto like decode mode. You don’t need these files to export Pronto hex from timings. These IRP definitions can be downloaded from the JP1 file section. Use this option to locate the folder where the IRP definition files are stored.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Clear Recent&amp;lt;/strong&amp;gt;&lt;br /&gt;
1 filename&amp;lt;br&amp;gt;&lt;br /&gt;
2 filename&amp;lt;br&amp;gt;&lt;br /&gt;
3 filename&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Clears the list of the last files accessed.&amp;lt;br&amp;gt;&lt;br /&gt;
IRScope saves the last 6 files accessed.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Exit&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Quits the program and closes all waveform windows.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
Edit menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Select All Ctrl+A&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Selects all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Deselect All Ctrl+D&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deselect all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Clear All&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deletes all the signals from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Add Note to Selected Ctrl+N&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This allows you to label each signal in the decode grid. This is an important feature when you are collecting a set of signals. These notes are used in the summary reports and in the export reports.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Move Selected Up Ctrl+Up&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Moves the selected items in the decode grid up.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Move Selected Down Ctrl+Dn&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Moves the selected items in the decode grid down.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Delete Selected Del&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
      &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Deletes the selected items from the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export Menu&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Last Signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Creates or appends to a file with the name ExportedUEI, ExportedPronto or ExportedLintronic.txt depending on the current Export Mode. The file will be created in the file Export Output Folder or the Common Save Folder. Exports the last signal captured in the mode selected.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Selected Ctrl+E&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Same as above, only this will export the signals selected in the decode grid.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Export Mode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;  UEI Learned&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this option to create or append to a file named ExportedUEI.txt. The individual learns can be pasted into an ir file and uploaded into a learning remote.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Pronto from signal&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Use this to create or append to a file named ExportedPronto.txt file based on the actual timings.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Pronto from decode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This file will create or append to a file named ExportedPronto.txt file based on the protocols rules. To use this option you need to download the IRP files required for MakeHex and set the IRP folder. Use this option to create proto hex suitable for presentations.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Lintronic&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This file will appends to or creates an ExportedLincronic.txt file based on the actual timings.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advanced Menu&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutosSave Types &amp;gt; &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;AutoSave saves every Widget capture automatically. New features in the software allow better options for saving signals. Saving a set is a better practice than using autosave.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;IR Capture Text (.ict)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Infrared Capture txt is one of the options for autosave. These are the IRScope files that can be reopened.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Audio(.wav)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This legacy format is only available in AutoSave mode from initial captures.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;TV-B-Gone (tvbg.c)&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This legacy format is only available in AutoSave mode from initial captures.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutoSave Mode&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Auto Filename&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option automatically generates a filename for the ict files. The default filename is consists of the letters IR followed by a 14-character date/time code in the format: [year] [month] [day] [hour] [minute] [second]. For example, IR20091212162102.ict&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Prompt for Filename&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option automatically saves every capture, but pauses to allow entry of a meaningful name for  each ict file.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;AutoLocate Widget&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This feature automatically finds which Com Port is assigned to the Widget.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Suppress Beeps&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;IRScope beeps when it is ready to start the capture unless the option is checked.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Hide Save-Panel &amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;[[Image:irscope10a.jpg]] &lt;br /&gt;
     This option hides the Save panel. This panel duplicates the AutoSave Types and AutoSave Mode menu selections described above.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Thumbnail Scale&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;The options below control the way the thumbnails appear in the waveform window.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Fixed Resolution&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Fixed resolution always depicts the thumbnail on a 500ms scale.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Limited Duration&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Limited duration uses a variable scale that depicts the capture or the selected signal.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Entire Waveform&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Represents the entire capture time&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Select on Capture&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option causes the capture to be automatically selected in the decode grid after it is captured. This allows for speedier data entry on the notes field. Turn this option off to manually control which decode grid item is selected.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Common Output Folder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This features automatically saves Export files in the same folder as the Save Output folder. This option helps users working on multiple projects to keep their work organized.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; IRP Data Format&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option specifies for how the portion of the IRP form that represents the data {A=} will be displayed. In my example A is 32 bits of data.&amp;lt;br&amp;gt;&lt;br /&gt;
Sample IRP form:&amp;lt;br&amp;gt;&lt;br /&gt;
{39.0k,243,msb}&amp;lt;2,-5|2,-12&amp;gt;(35,-4262u,A:32,2,-33.5m)&lt;br /&gt;
+{A=$00D4C936}&lt;br /&gt;
Binary (base2 prefix 0b)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0b00000000110101001100100100110110}&amp;lt;br&amp;gt;&lt;br /&gt;
Quaternary (base 4, prefix0q)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0q0000311030210312}&amp;lt;br&amp;gt;&lt;br /&gt;
Hex (base 16 prefix 0x)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=0x00D4C936}&amp;lt;br&amp;gt;&lt;br /&gt;
Hex (base 16, prefix $)&amp;lt;br&amp;gt;&lt;br /&gt;
{A=$00D4C936}&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
 &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt; Disable Decoder&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This disables the decoder and makes the decode grid disappear from the main screen. If you decode grid goes missing check this setting.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
Help&lt;br /&gt;
&amp;lt;table width=&amp;quot;592&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt; &lt;br /&gt;
 &amp;lt;tr&amp;gt; &lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;Interpreting IR Decodes&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;This option opens DecodeIR.HTM in your internet browser. DecodeIR, gives the information about the protocol rules used to decode the signals.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;/tr&amp;gt;&lt;br /&gt;
  &amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;td bgcolor=&amp;quot;#CCCCCC&amp;quot; width=&amp;quot;183&amp;quot; &amp;gt;&amp;lt;strong&amp;gt;About&amp;lt;/strong&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
     &amp;lt;td width=&amp;quot;393&amp;quot;&amp;gt;&amp;lt;p&amp;gt;Displays the licensing and copyright information for IRScope. Note that on the software version numbers are not buried in the About box, they are already clearly displayed in the title bar of the main IRScope window.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
   &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exploring the Waveform==&lt;br /&gt;
[[Image:irscope3.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 10. Waveform Explained&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The waveform window is very useful in diagnosing problems and creating custom protocols. The waveform in Figure 10 has been labeled to show what the various parts of a waveform represent.&lt;br /&gt;
The waveform can be seen on capture; when you Open or View an ict file; or when you double click on a signal from the decode grid. When double clicking the decode grid, the portion of the waveform that represents the selected decodes will be highlighted in red.&lt;br /&gt;
The Frequency is in the upper corner. In Fig.10, the frequency is 39944hz. If a mixture of signals was captured, the frequency is not computed and instead &amp;lt; freq varies&amp;gt; is shown. Frequency is a measure of how many times the light flickered during an ON pulse time period.&lt;br /&gt;
The pulse times are the numbers below the line. You may be used to seeing pulse times with + and minus like +2400, -600, + 1200 –600 +600 when no waveform is available. The – was used to indicate the quite times, not to indicate a negative time.&lt;br /&gt;
Thumbnails The top line of the waveform windows shows thumbnails. There are three options to control how the thumbnail line will be displayed. Under the Advanced menu, Thumbnail Scale you have the option of Fixed Resolution, Limited Duration and Entire Waveform. Choose a thumbnail scale that suits your activity.&lt;br /&gt;
Fixed Resolution When the thumbnail scale is set to fixed resolution, the thumbnail will always represent 500mS. Fixed resolution is your best choice when comparing signals in different waveform windows.&lt;br /&gt;
Limited Duration When the thumbnail scale is set to limited duration, the thumbnail will be scaled to show the entire capture dropping any quiet time at the end of the signal. The thumbnail will shrink or expand depending on how long the infrared activity lasted.&lt;br /&gt;
&lt;br /&gt;
Entire Waveform When the thumbnail scale is set to entire waveform, the thumbnail will represent the capture duration including any quite time at the end.&lt;br /&gt;
Figure 11 shows the same capture showing in all three thumbnail scales. The capture duration was 1500ms, the infrared activity lasted only far less than the 500ms in the fixed.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope11.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 11. Thumbnail Scales&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Scalability. Another one of IRScope’s powerful features is the ability to change the resolution of the waveform. Not all signals will display well at the default 20 microseconds per pixel resolution. You can easily change this resolution to make the display more readable. You can also remove the pulse counts, pulse times and the elapsed time numbers from the display.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope12.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 12. IRScope Config Dialog Box&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 12 shows the scale of the timing chart as presently displayed. The default resolution is 20 microseconds per pixel. The microseconds per pixel can be set anywhere from 1 to 2000. Click OK, and the display instantly shrinks or expands to the new scale.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope13.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 13. Example of Waveforms Zoomed Out 5X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 13 shows a simple example where the zooming feature has been used. The waveform displays of signals for buttons &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, and &amp;quot;3&amp;quot; of an RCA remote have each been zoomed out to a resolution of 100 μS per pixel, then the windows were overlayed and lined up for comparison. Can you spot the subtle differences in timing between the three display patterns? Since all the carrier ON times are of uniform duration, and there are two sizes of OFF times, it&#039;s obvious this protocol encodes &amp;quot;1&amp;quot; and &amp;quot;0&amp;quot; bits by the amount of OFF time between carrier bursts.&lt;br /&gt;
The &amp;quot;1 button&amp;quot; example in Figure 13 typifies the appearance you get when you just zoom out on a signal. The numbers showing ON and OFF times etc. are still there, but they overlap too much to be readable except for some of the larger ON and OFF times. The three check boxes in the IRScope Config dialog box enable you to turn off one or more of these measurements when you want to see a cleaner picture. To illustrate the effect, I unchecked all three boxes when zooming out on the &amp;quot;2 button&amp;quot; and &amp;quot;3 button&amp;quot; waveforms. Zooming in and out is fast, but if you prefer you can also open more than one copy of the same waveform and zoom them out to different scales for simultaneous viewing while studying a signal.&lt;br /&gt;
When zooming, neither the size of the window nor the scale of the thumbnail display is changed. Only the scale of the waveform is expanded or contracted to show more or less detail. You can also stretch the overall width of a waveform display window to the full width of your screen, but that won&#039;t change the amount of detail shown. For an experiment, try stretching a display until the lines start at 0, 20000, 40000, 60000, etc. By doing this you have adjusted the display so that its width is exactly 20,000 μS, or 20 mS, a nice round number for estimating or measuring the position of various features.&lt;br /&gt;
&lt;br /&gt;
==IRScope&#039;s Output==&lt;br /&gt;
IRScope has a lot of output formats. The formats are ICT files, Summary Reports, ExportedUEI.txt, ExportedPronto.txt, and ExportedLintronix.txt files. There are also two old legacy formats, audio.(wav) and TV-B-Gone (tvbg.c).&lt;br /&gt;
ICT Infrared Capture Text&lt;br /&gt;
IRScope&#039;s primary file format is the ICT file. ICT files are the only type of files used for both input and output in IRScope. ICT files can be created with the Save As, Save All As buttons and with the Save Last, Save Last As, Save Selected and Save Selected As items on the File Menu. The files will be stored in the folder specified in with the Set Output Save Folder option in the File Menu. Any option that included “As” will prompt for a filename. The other save methods will use automatic file naming form, (IRyyyymmddhhmmss.ict).&lt;br /&gt;
ICT files can be opened with the View button from the screen, or with the Open command on the File menu.&lt;br /&gt;
Saved files are in text format, and have an extension of .ict. Figure 14 shows the initial portion of a typical .ict file.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope14.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 14. Portions of a Sample.ict File&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Figure 14, the numbers correspond to the timing numbers that appeared in the waveform.&lt;br /&gt;
A number preceded by a &amp;quot;+&amp;quot; symbol is the ON time in microseconds for a carrier burst, and the number following a comma is the number of carrier cycles that make up that burst. A number proceeded by a &amp;quot;-&amp;quot; symbol is the OFF time in microseconds between carrier bursts. As you can see, there is enough data in the .ict file to completely reproduce a graphic display. Decode data is not part of a saved file. When a saved file is recalled, the decoder reprocesses the data to decode it.&lt;br /&gt;
Any notes that were manually entered in the decode grid are also stored in the ict file. When the ict file is opened or viewed the note and decode will be added to the decode grid.&lt;br /&gt;
&lt;br /&gt;
Summary file&lt;br /&gt;
The summary file is an rtf (rich text format). This is an output only file. This report is created by pressing the Summary button on the screen, or selecting Summary from the File menu.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope7.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 15. Summary Report&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Exported files&lt;br /&gt;
IRScope can also export timing data in UEI format, Pronto Format, and Lintronic Format. These files are for output only. Each format type has its own predefined filename ExportedUEI.txt, ExportedPronto.txt, and ExportedLintronics.txt. These files will be automatically located in the folder specified for Set Export Output Folder, or if the Common Output Folder option is set on the Advanced menu, these will be located in the Set Save Output Folder. If the filename already exists, the signals will be appended to the existing file. To export, select signals in the decode grid and press the Export button on the screen. The format to be exported is controlled by the Export Mode option on the Export menu.&lt;br /&gt;
&lt;br /&gt;
Figures 16, 17 and 18 are examples of what the exported output looks like when viewed in notepad &lt;br /&gt;
&lt;br /&gt;
[[Image:irscope16.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 16. ExportedUEI.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope17.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 17. Sample ExportedPronto.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The hex in the ExportedPronto files could have been created either from the raw timing data, or from the decode. The difference is that in Pronto from decode mode, the timings will be adjusted to match the IRP definition. The Pronto from Decode option makes hex that is free from itty-bitty capture variations, but you should verify that the signal truly complies with the decode, since this method could either correct or distort the signal.&lt;br /&gt;
Hint: To make presentation worthy waveforms, export the pronto hex using the Pronto from Decode export mode. Then open the ExportedPronto.txt file in notepad. Copy the pronto hex for the signal from notepad and paste the data into IRScope’s Import window. This will make beautiful waveforms that use IRP timing data and don’t show any of the timing variations introduced during play and capture.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope18.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 18. Partial ExportedLintronic.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Legacy Formats&lt;br /&gt;
&lt;br /&gt;
IRScope can produce two other output only formats, Audio (.wav) files and TV-B-Gone (tvbg.c) files. These formats were available in the original IRScope, but support for these formats has not evolved as the enhancements were made to IRScope. These legacy formats are only available in AutoSave mode on capture&lt;br /&gt;
&lt;br /&gt;
==TOMMY’S MACRO EXAMPLE==&lt;br /&gt;
Solving problems with macros is much easier if you know exactly what is being transmitted and when. For an example I created a macro containing four commands on my URC6012 remote. I test fired it at the Widget to make sure I was getting multiple LED flashes, and based on that, I set the Capture Duration for 4000 mS. I also dropped down the Advanced menu and set the Thumbnail Scale to Entire Waveform.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope19.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 19. Example of Macro Waveform Display&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 19 shows the captured waveform display, and Figure 20 shows how IRScope has decoded the macro as four separate signals, as if you had pressed those four buttons individually. Each signal has a different carrier frequency, so the waveform display shows it as &amp;lt;freq varies&amp;gt;. The thumbnail shows the entire 4 seconds Capture Duration and, although you can&#039;t make out much detail, you can clearly see that it contains four signals. The main waveform display is only large enough to show the three frames of the first signal, which is only about 3% of the entire macro.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope20.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 20. Example of Decoded Macro&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There are several ways to get a better look at the overall picture: You can zoom out, you can scroll through it, you can use the waveform selection tool, or you can use a combination of these. Zooming out is a good way to see the time delays between macro commands. Figure 21 shows the macro zoomed out to 590 μS per pixel.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope21.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 21. Example of Figure 19 After Zooming Out to 590 μS Per Pixel&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Why did I select 590 μS per pixel? Note that in Figure 21 the last full line we can see starts at 135740 μS. So if we want to compress (zoom out on) the entire 4000 mS recording so it appears in that same space, we need to multiply the default resolution by 4000000 μS /135740 μS, or 29.5. So I double-clicked on the waveform display and changed the resolution from 20 microseconds per pixel to (29.5 x 20) = 590 microseconds per pixel.&lt;br /&gt;
At this scale you can easily see the time delay between the four commands, shown as 1,057,830, 1,061,373, and 1,057,737 μS. (To be scientifically correct, you should express these and all other IRScope measurements to only three significant figures, such as 1.06 seconds, in consideration of the limit of their accuracy.) Other types of remotes might repeat the signals a different number of times, or separate the commands by more or less time, because macro specifications are not chiseled in stone. One reason people like to use Extenders is that they often reduce the delay between commands to speed up macro execution.&lt;br /&gt;
If you are working with a large screen monitor and you really want to see this macro as one gigantic picture, here&#039;s the way to do it. After stretching the width and height of the window until it completely filled my screen, I noted that the bottom line started at 462000 μS. Dividing the overall macro Capture Duration, 4000000, by 462000 and multiplying by 20 μS per pixel gives 173 μS per pixel as my new resolution.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope22.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 22. Macro of Figure 21 Expanded and Zoomed to Fill the Screen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Figure 22 shows the entire waveform display at this resolution, although the page is not really large enough to show it as well as it looks on a screen twice this size.&lt;br /&gt;
Another easy way to examine a macro is with the waveform selection tool. Even though there is only one waveform display, selecting a signal for viewing is done the same way as with individual recordings. Just click on one of the four lines in the decode area and the macro waveform display will instantly scroll to that signal and highlight it in red.&lt;br /&gt;
You will find that the measurement of carrier frequency and timing may not be quite as accurate when working with a macro. However, these errors are still well within the acceptable range of operation for the infrared receivers used in consumer devices. If you want more accurate measurements for one of the signals, capture a sample of that signal alone.&lt;br /&gt;
&lt;br /&gt;
==Vicky&#039;s Protocol Example==&lt;br /&gt;
IRScope is a great companion for Protocol Builder (PB). PB is a Microsoft Excel spreadsheet that can create executors to handle oddball signals for our JP1 remotes. Getting the remote to produce the desired signal can be a challenge. IRScope’s waveform takes the guesswork out of the process since visual comparisons can ensure that the executor’s signal matches the OEM signal.&lt;br /&gt;
IRScope is a great tool for debugging user upgrade problems too. Sometimes the user does everything right and the dang thing still won’t operate the equipment. Sometimes you actually need to see the signals to diagnose a problem.&lt;br /&gt;
DecodeIR, IRScope’s decoding module, does some magical mathematical gymnastics to identify the various signals. Usually an unknown signal is identified as a Gap protocol or Unknown protocol. Occasionally the signal follows enough of the protocols rules to be misidentified.&lt;br /&gt;
In my example, the OEM learns work, but the NEC2 upgrade, made from the decodes, did not work. All of the user’s files looked okay. I transferred the user’s learn to my remote, and captured the signal. I then loaded the upgrade into my remote, and captured the signal. On the surface everything looks good, but the user had reported that the signals don’t work.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope23.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 23: OEM Signal works, NEC2 Upgrade does not&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Looking at the Decode Grid you see that the device, subdevice and OBC all match. You might notice the small difference in frequency, but that is insignificant. Most devices tolerate frequency differences of +1000 or -1000 or more without any issue, so the tiny frequency difference shown in fig.23, is not the cause of our problems.&lt;br /&gt;
My first order of business is to make sure that I have my thumbnail scale to Fixed Resolution. This will set the thumbnail scale to be equal on all signals, regardless of the sample size. Both Limited Duration and Entire Waveform Thumbnails use arbitrary time lines and so thumbnails of different durations cause the thumbnails to be distorted so they can’t be easily compared.&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope24.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 24. Limited Duration and Fixed Duration thumbnails.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Figure 24, the Limited Duration makes the signals look more alike than they really are. The Fixed Resolution shows the signals on the same time scale.&lt;br /&gt;
IRScope’s thumbnail comparisons can quickly point out problems. Certain signal problems have different characteristics. For instance, if the lead out time (the time between first frame and the second frame) is too long or too short, it can cause the repeat frames to be treated as new key presses, so a press of “1” might show up as “11”. In this user’s situation, the signals don’t didn’t work at all. When upgrade signals work, the thumbnails look like the thumbnails from the OEM signal. Remember, an IR signal is a timed light pattern, the timing is important. If you look at the Fixed Resolution thumbnails in fig. 24, you can easily see that the timings of the two samples are very different.&lt;br /&gt;
Most equipment is pretty forgiving when it comes to small variations in pulse times, but no equipment is going to recognize signals that are this far off. We’re going to need a custom protocol here.&lt;br /&gt;
&lt;br /&gt;
If the thumbnails had not made the problem so evident, I would have looked for more subtle timing problems by comparing the detail portion of the waveform. The OEM signal waveform, Figure 25, shows a typical variance in the pulse timings. We need to do some rounding here to get numbers we can work with. Generally timings with values within 50uS are considered to be equal.&lt;br /&gt;
When building a protocol executor in Protocol Builder (PB), I would use the rounded timings from the waveform to create an executor. I would use the following values to create the OEM signal shown in fig.25.&amp;lt;br&amp;gt;&lt;br /&gt;
Lead-In Pair= + 8500, -4250&amp;lt;br&amp;gt;&lt;br /&gt;
Zero = +500, -1250&amp;lt;br&amp;gt;&lt;br /&gt;
One = +500, -3000&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:irscope25.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 25. OEM Signal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The official NEC2 IRP shows times in multiples of 564.&lt;br /&gt;
Nec2 IRP notation: {38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&lt;br /&gt;
Our IRP for the OEM signal, will be show times in a multiples of 500.&lt;br /&gt;
If you are comfortable with IRP, you could do the computation and see how different these signals timings are.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Official Nec2&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8824, -4412&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+564, -564&amp;lt;br&amp;gt;&lt;br /&gt;
One= +564, -1692&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The OEM signal (fig.25)&amp;lt;br&amp;gt;&lt;br /&gt;
Lead-In Pair=+ 8500, -4250&amp;lt;br&amp;gt;&lt;br /&gt;
Zero= +500, -1250&amp;lt;br&amp;gt;&lt;br /&gt;
One =+ 500, -3000&amp;lt;br&amp;gt;&lt;br /&gt;
IRP: {38.4k,500}&amp;lt;1,-2.5|1,-6&amp;gt;(17,-8.5,D:8,S:8,F:8,~F:8,1,-67)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
[[Image:irscope26.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 26, shows the pulse times when an upgrade is using the NEC2 executor.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For figure 26, I would round the timings to:&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br&amp;gt;&lt;br /&gt;
Compared side by side, you can see that the NEC2 signal from the upgrade complies with the official &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;NEC2 IRP. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Official Nec2 times&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8824, -4412&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+564, -564&amp;lt;br&amp;gt;&lt;br /&gt;
One= +564, -1692&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,564}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The Nec Upgrade signal fig(26)&amp;lt;br&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br&amp;gt;&lt;br /&gt;
IRP{38.4k,550}&amp;lt;1,-1|1,-3&amp;gt;(16,-8,D:8,S:8,F:8,~F:8,1,-78)+&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
[[Image:irscope26.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Figure 26. NEC2 Upgrade Signal&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you are not familiar with IRP, you could just compare the rounded timing values from both the OEM signal’s waveform in Figure 25, and the NEC2 upgrade signal in Figure 26.&lt;br /&gt;
Compared side by side, you can see how much different the timings are.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The Nec2 Upgrade signals (fig.26)&amp;lt;br /&amp;gt;&lt;br /&gt;
Lead in Pair =+8800, -4400&amp;lt;br /&amp;gt;&lt;br /&gt;
Zero =+550, -550&amp;lt;br /&amp;gt;&lt;br /&gt;
One= +550, -1650&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
The OEM signal (fig.25)&amp;lt;br /&amp;gt;&lt;br /&gt;
Lead-In Pair=+ 8500, -4250&amp;lt;br /&amp;gt;&lt;br /&gt;
Zero= +500, -1250&amp;lt;br /&amp;gt;&lt;br /&gt;
One =+ 500, -3000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apparently the OEM signal followed enough of the Nec2 protocol rules to fool decodeIR, but it is not nearly close enough to operate the equipment. The upgrade can’t use the NEC2 protocol. Instead a custom protocol executor would be written. An executor to send a signal like this, with such simple formatting rules, can be easily created by filling in the fields in a Protocol Builder spreadsheet. No additional assembly language programming would be necessary.&lt;br /&gt;
After building the executor, I test the executor by shooting the signals at the Widget. Then I adjust settings as necessary to get the details as close to the OEM signals as possible. This assures that the equipment will respond reliably to upgrades created with the new executor.&lt;br /&gt;
To learn more about IRP I recommend reading the Infrared Protocol Primer.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&#039;&#039;&#039;Why doesn’t my IRScope Window have a decode grid?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
You may have disabled decodeIR. In the Advanced menu, uncheck Disable DecodeIR.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why am I getting a file creation error when saving or exporting?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Make sure that the Set Save Folder and the Set Export Folder in the File menu have been set to valid directories and that you are not trying to store them directly in the root directory.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When trying to launch IRScope I get a message “Could not open File”.&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
IRScope only allows one session to run at a time. This message usually indicates IRScope is already running in another window. If that does not seem to be the case, confirm that by checking the &lt;br /&gt;
Applications Tab of the Windows Task Manger.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why can’t I export Pronto Hex when in “Pronto from decode” mode?&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
The Pronto from decode mode only uses known protocols. If an unknown protocol is selected nothing will be exported, try the Pronto from timings mode instead.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;I started IRScope, but I can’t find it.&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
Many settings are preserved between sessions using registry settings. Screen location is one of those settings. Use Windows Task Manager to switch to IRScope and then check the perimeters of the screen to see if you have moved IRScope to the edge and drag it back where you want it.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IRScope stores its registry settings in HKEY_CURRENT_USER/Software/UEIC/IRScope/Settings &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COMMENTS AND SUGGESTIONS:&#039;&#039;&#039; Suggestions for additions or corrections to these instructions are&lt;br /&gt;
welcomed and should be posted to the forum.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Protocol_Builder&amp;diff=3408</id>
		<title>Protocol Builder</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Protocol_Builder&amp;diff=3408"/>
		<updated>2025-11-23T00:09:40Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Protocol Builder&#039;&#039;&#039; (aka &amp;quot;PB&amp;quot;) is a spreadsheet based program that is used to create new executors for JP1 remotes.  An &#039;executor&#039; is a piece of code used by a JP1 remote to replicate an infared protocol.  The documents below describe how you can capture a new signal using your JP1 learning remote and build a new upgrade.&lt;br /&gt;
&lt;br /&gt;
Before you start, you should download this &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2304 zip file]&amp;lt;/span&amp;gt; which contains some sample files referred to in the following docs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Signal Specifics==&lt;br /&gt;
First, look at the signals in the &amp;quot;Learned Signals&amp;quot; tab of IR.exe, then cut &amp;amp; paste the timing data over to a text editor (such as Notepad, etc).  It would be helpful if the text editor allows you to perform global edits.  The version of Notepad that ships with Windows 2000 does allow global edits, but earlier versions do not, in which case it might be a better idea to use Wordpad.  Copy the data in the order that the buttons appear in the Learned Signals tab so you don&#039;t lose track of which button each set of data belongs to.&lt;br /&gt;
&lt;br /&gt;
[[Image:IR-learned-signals.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Image 1 – the “Learned Signals” tab in IR&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you have completed copying the data, you should have a file somewhat like the codes1.txt file included in this [http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2304 zip file].  The next step is to try and clean up the signal times.  IR tends to report the signal times very exactly, but in reality most devices have quite a large level of tolerance for signals not being exactly what they should be.  So, what we need to do now is try and round all the numbers up or down so all similar numbers are actually the same.  For example, if you see times like +988, +995, +1015, etc, they are all really the same time and can be rounded to +1000.&lt;br /&gt;
&lt;br /&gt;
When you have finished rounding the numbers, you should end up with a file somewhat like codes2.txt in the [http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2304 zip file].  The data in this file should be viewed as pairs, where a pair is a grouping of a ON time and an OFF time.  The ON times are represented by positive numbers and the OFF times are represented by negative numbers.  The next step is to attempt to identify the following pairs: &lt;br /&gt;
&lt;br /&gt;
*Lead-in pair&lt;br /&gt;
*Logical &amp;quot;zero&amp;quot; pair&lt;br /&gt;
*Logical &amp;quot;one&amp;quot; pair&lt;br /&gt;
*Lead-out pair&lt;br /&gt;
&lt;br /&gt;
Looking at the data in codes2.txt, you will notice that the first pair is &amp;quot;+5000 -3000&amp;quot; and then there is a mixture of the following two pairs &amp;quot;+1000 -1000&amp;quot; and &amp;quot;+1000 -3000&amp;quot;, then eventually you will find a pair with a much bigger OFF time, and then the whole signal repeats.  In all of these examples, the signal is repeated 2 times, and each repetition includes the lead-in and lead-out pairs.&lt;br /&gt;
&lt;br /&gt;
Therefore, here&#039;s the data for the afore mentioned pairs: &lt;br /&gt;
&lt;br /&gt;
*Lead-in pair = &amp;quot;+5000 -3000&amp;quot;&lt;br /&gt;
*Logical &amp;quot;zero&amp;quot; pair = &amp;quot;+1000 -1000&amp;quot;&lt;br /&gt;
*Logical &amp;quot;one&amp;quot; pair = &amp;quot;+1000 -3000&amp;quot;&lt;br /&gt;
*Lead-out pair = (to be determined)&lt;br /&gt;
&lt;br /&gt;
Actually, there is no exact science to deciding which of the two variable pairs is the logical &amp;quot;one&amp;quot; and &amp;quot;zero&amp;quot; pairs.  Generally speaking, the &amp;quot;zero&amp;quot; pair will have smaller times than the &amp;quot;one&amp;quot; pair, but even that&#039;s just a guess.  Bottom line, it doesn&#039;t really matter.  In fact, UEI gets it wrong more often than they get it right in their protocols.&lt;br /&gt;
 &lt;br /&gt;
So, now that we&#039;ve guessed the &amp;quot;one&amp;quot; and &amp;quot;zero&amp;quot; pairs, let&#039;s edit the file so we can see the binary.  My preferred way to do this is to edit the strings like this: &lt;br /&gt;
&lt;br /&gt;
&amp;quot;+1000 -1000&amp;quot; --&amp;gt; 0^&lt;br /&gt;
&amp;quot;+1000 -3000&amp;quot; --&amp;gt; 1^&lt;br /&gt;
&lt;br /&gt;
I put the ^ character after the number so that if I later decide I want to reverse the pairs and make the first pair the logical &amp;quot;one&amp;quot; I can edit all the 0^ and 1^ strings and reverse them.  When you&#039;re done editing the &amp;quot;one&amp;quot; and &amp;quot;zero&amp;quot; pairs, you should end up with a file somewhat like codes3.txt   You&#039;ll notice that I&#039;ve inserted a space in the middle of the binary string, breaking it into two groups of 8.  In the binary world, 8 is considered a round number, so you&#039;ll often find that the total length of the binary signal is a multiple of 8.  In this case you should notice that the second string is constant for all the signals, so we can consider this to be our &amp;quot;device code&amp;quot;.  The first string is different for all the signals, so we can consider this to be our &amp;quot;command code&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
While units of 8 are the most common, there are always exceptions to every rule.  Your immediate goal is to determine which bits are constant for every signal and which bits vary.  The more learned signals you have, the greater the chance that you will get this right.&lt;br /&gt;
&lt;br /&gt;
At this point you should examine the data and see if you can spot any &amp;quot;compliments&amp;quot;.  A compliment code is where the data is the same as the previous data, only inverted.  (Inverted, or complimented, means that if the original bit was 0, the new bit should be 1, and vice versa).&lt;br /&gt;
&lt;br /&gt;
Normally, you would probably find that the lead-out pair is constant for all signals, but in this case it varies, which leads me to suspect that it&#039;s calculated as a result of the total signal length.  Every &amp;quot;zero&amp;quot; pair lasts 2000 uSecs and every &amp;quot;one&amp;quot; pair lasts 4000 uSecs, so given that there are 16 bits in each of these signals, the data portion of the signal will last a minimum of 32000 uSecs (which would mean that the binary was all zeroes).  Each &amp;quot;one&amp;quot; in the signal would add an additional 2000 uSecs to the total.  If you calculate the total duration of the data portion of the signal and add in the lead-out times, you&#039;ll find that each signal lasts for a total of 98000 uSecs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Entering Signal Specifics Into PB==&lt;br /&gt;
Now, let&#039;s move on to the PB spreadsheet itself, when you first open it, it looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:PB-sheet1.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Image 2 - Protocol Builder&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
And you thought KM was scary!  Don&#039;t worry, just like KM this spreadsheet is actually easier to use than it looks.  Now we have to start entering the data that we have just worked on.&lt;br /&gt;
&lt;br /&gt;
#&#039;&#039;&#039;Description:&#039;&#039;&#039; Very short description of the signal, our signals were for a &amp;quot;Next Level&amp;quot; cable box, so let&#039;s enter &amp;quot;Next Level&amp;quot;.&lt;br /&gt;
#&#039;&#039;&#039;Remote Type:&#039;&#039;&#039; Generally speaking, you should leave this as &amp;quot;S3C8 Generic Code&amp;quot; as this covers most of the remote in use in the JP1 world.  If you believe that you need one of the other options, but are not sure which one to use, you should post a question about it in the forums.&lt;br /&gt;
#&#039;&#039;&#039;Protocol Id:&#039;&#039;&#039; Basically, this can be whatever you want, but it&#039;s generally a good idea to use an id that is not already established as an official protocol id.  You enter the code in hex format where 0 is  the smallest value allowed and 1FF is the largest.  So, I would advise that you use 1FF for this new protocol.&lt;br /&gt;
#&#039;&#039;&#039;Frequency:&#039;&#039;&#039; Enter the value displayed in IR&#039;s &amp;quot;Learned Signals&amp;quot; tab.&lt;br /&gt;
#&#039;&#039;&#039;Duty Cycle:&#039;&#039;&#039; There&#039;s no easy way to determine this, so use 30% unless you have reason to do otherwise.&lt;br /&gt;
#&#039;&#039;&#039;Signal Structure:&#039;&#039;&#039; This is determined by how the binary data is laid out.  In our example, the command code came before the device code and there weren&#039;t any compliments involved, so we should select &amp;quot;cmd-dev&amp;quot;.&lt;br /&gt;
#&#039;&#039;&#039;[Device] Bytes:&#039;&#039;&#039; this is the number of bytes of fixed data.  In our example we found one fixed byte, so we will enter 1.&lt;br /&gt;
#&#039;&#039;&#039;Bits/Dev:&#039;&#039;&#039; this is how many bits are in each fixed byte.  The max value is 8, which is also the most common answer.  In our example, there are 8 fixed bits.&lt;br /&gt;
#&#039;&#039;&#039;[Command] Bytes:&#039;&#039;&#039; this is the number of bytes of variable data.  In our example we found one variable byte, so we will enter 1.&lt;br /&gt;
#&#039;&#039;&#039;Bits/Cmd:&#039;&#039;&#039; this is how many bits are in each variable byte.  The max value is 8, which is also the most common answer.  In our example, there are 8 fixed bits.&lt;br /&gt;
#&#039;&#039;&#039;[Repeat] Value:&#039;&#039;&#039; this is the minimum number of times the signal should repeat.  It appears from the data in our examples, that the signal should repeat at least 2 times.&lt;br /&gt;
#&#039;&#039;&#039;Type:&#039;&#039;&#039; when set to &#039;Minimum&#039;, item 10 above controls the minimum number of repeats, supposedly &#039;Forced&#039; makes the signal repeat that many times only, but I understand this this setting is not reliable.&lt;br /&gt;
#&#039;&#039;&#039;Hold:&#039;&#039;&#039; this determines if the signal repeats, and if so, under what circumstances. &amp;quot;Yes&amp;quot; means the whole signal will repeat for as long as the button is held down.  &amp;quot;No&amp;quot; means the signal does not repeat at all.  Selecting &amp;quot;Ch+/-, Vol+/-, FF, Rew&amp;quot; will cause the signal to only repeat when those buttons are used, otherwise it will not repeat.  The final selection is &amp;quot;No data bits in repeat&amp;quot;, which is outside of the scope of this document.  All of the data in our limited sample would suggest that our signal does not need to repeat when the button is held down, so &amp;quot;no&amp;quot; would be the logical selection.  However, the CH+ and CH- buttons did repeat, so &amp;quot;Ch+/-, Vol+/-, FF, Rew&amp;quot; is probably the right selection.  If in doubt, try each of them and see which works.&lt;br /&gt;
#&#039;&#039;&#039;[&#039;1&#039; Burst] ON (uSec):&#039;&#039;&#039; this is the ON time for the logical &amp;quot;one&amp;quot; pair (which is the positive number), so for our example we will enter 1000.&lt;br /&gt;
#&#039;&#039;&#039;OFF (uSec):&#039;&#039;&#039; this is the OFF time for the logical &amp;quot;one&amp;quot; pair (which is the negative number), so for our example we will enter 3000.&lt;br /&gt;
#&#039;&#039;&#039;[&#039;0&#039; Burst] ON (uSec):&#039;&#039;&#039; this is the ON time for the logical &amp;quot;zero&amp;quot; pair (which is the positive number), so for our example we will enter 1000.&lt;br /&gt;
#&#039;&#039;&#039;OFF (uSec):&#039;&#039;&#039; this is the OFF time for the logical &amp;quot;zero&amp;quot; pair (which is the negative number), so for our example we will enter 1000.&lt;br /&gt;
#&#039;&#039;&#039;[Lead-In Style]:&#039;&#039;&#039; this determines whether there is a lead-in burst pair for this signal, and if so, whether it appears once only or in every repetition of the signal.  In our example, the lead-in is present in every repetition, so &amp;quot;Same Every Frame&amp;quot; is the correct selection.&lt;br /&gt;
#&#039;&#039;&#039;[Lead-Out Style]:&#039;&#039;&#039; this determines whether the lead-out portion is a burst pair or just a single OFF time.  &amp;quot;[-LO]&amp;quot; means it&#039;s just a single OFF time. &amp;quot;[LI,-LO]&amp;quot; means it&#039;s a pair which uses the Lead-in pairs ON time. &amp;quot;[OneOn, -LO]&amp;quot; means it&#039;s a pair that uses the logical &amp;quot;one&amp;quot; pairs ON time.  &amp;quot;[LI], [OneOn, -LO]&amp;quot; means that the lead-in pair is repeated and it&#039;s followed by a &amp;quot;[OneOn, -LO]&amp;quot; pair.  In our example, the lead-out ON time was 1000, which matches the ON time for the logical &amp;quot;one&amp;quot; pair, so we should select &amp;quot;[OneOn, -LO]&amp;quot;.&lt;br /&gt;
#&#039;&#039;&#039;[Lead-Out] OFF (uSec):&#039;&#039;&#039; this is the lead-out OFF time. (see below)&lt;br /&gt;
#&#039;&#039;&#039;OFF as Total:&#039;&#039;&#039; when &amp;quot;no&amp;quot; is selected, the OFF time entered above will be used for every signal.  When &amp;quot;yes&amp;quot; is selected, the total duration of the data portion of the signal is calculated and subtracted from the time entered above to determine the actual lead-out time.  In our example, we found that the lead-out does indeed vary based on the total length of the signal and we also found that the total length of the signal is always 98000 uSecs, so we should select &amp;quot;yes&amp;quot; here and enter 98000 as the Lead-Out OFF time.&lt;br /&gt;
&lt;br /&gt;
You will notice that I skipped over some of the selections available in PB, any skipped item should be left set to it&#039;s default value.  Use of these skipped items is outside of the scope of this document, where I&#039;m trying to keep things somewhat simple.&lt;br /&gt;
&lt;br /&gt;
With all the above selections made, your PB screen should look like this…&lt;br /&gt;
&lt;br /&gt;
[[Image:PB-sheet2.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Your new protocol code is in the upper right corner ready for you to use.  Finally, you should save this code by using the SAVE button, just in case you want to re-load it in the future to make changes.  You should also post the saved file in the Yahoo file section.&lt;br /&gt;
&lt;br /&gt;
Next step is creating an upgrade to use this new protocol, for that we need to switch over to KM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Adding Assembler==&lt;br /&gt;
Sometimes complex protocols can&#039;t be created by just filling in the blanks on the worksheet.  In those cases, we need to use assembly language code to manipulate the data or IR signal in special ways.  &lt;br /&gt;
&lt;br /&gt;
Each of the microprocessors, the S3C8, P8-740, HCS08 and 6805,  that have been used in the various JP1 remotes have their own language. Mike England, (mr_d_p_gumby), has designed  PB to work with all of these assembly languages.  Text files with the syntax for each of the processors PB covers are included in the PB zip file.   More comprehensive information on the assembly languages can be found in the data sheets for the various microprocessors.  Check the [http://www.hifi-remote.com/wiki/index.php?title=Technical_Documents Technical Documents Area] for the microprocessor documentation.&lt;br /&gt;
  &lt;br /&gt;
The JP1 remotes are divided into 7 family types.  The family type can be described by the microprocessor, the base address, and vector locations.  PB can handle multiple sources on the Assembler sheet.  There can be one set of source code for each of the seven types of JP1 remotes. Each section of source code *must* begin with the REMOTE directive specifying the remote type.  The valid remote types are:   HCS08,  S3C8 ,  S3C8+,   SST,   6805-RC16/18 ,  6805-C9,   P8/740, and NONE. &lt;br /&gt;
  &lt;br /&gt;
Note: The argument &amp;quot;(NONE)&amp;quot; may be used with the REMOTE directive to turn off assembly of the entire section.&lt;br /&gt;
&lt;br /&gt;
===Getting started===&lt;br /&gt;
&lt;br /&gt;
Using the generated protocol code is one of the easiest ways to get started with your assembly code.  Fill in the timing data on the setup page.  Make sure the “use assembled code” is unchecked.  &lt;br /&gt;
#Copy the generated protocol code.&lt;br /&gt;
#Paste the protocol code into the decode area.  As a best practice use “Paste Special Values” option from the menu, otherwise you may inadvertently paste protection into the cells.&lt;br /&gt;
#Press the Decode button and the Disassembly tab will appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:pbass1.jpg]]&lt;br /&gt;
&lt;br /&gt;
You now have the starting assembly code for the selected processor.&lt;br /&gt;
&lt;br /&gt;
Once you transfer the disassembly to the assembler tab you can add your own code.  Its assumed that you have a working knowledge of the assembly language, and this document is just going to help you understand the PB interface.&lt;br /&gt;
&lt;br /&gt;
Below is a screen capture of the assembler tab.  As with KM the pale yellow area indicates read-only areas.  The dark yellow areas designed for user input except column H which is overwritten with the error code.  Column B: is the address, and Column C: is the Object Code.  Column D: is the Label, Column E is the Operator,  Column F: is the Operator Arguments, Column G is the Comments  and Column H: contains the error codes for the given line.&lt;br /&gt;
&lt;br /&gt;
You may also notice that the example below shows the source code for two different remote classes, the s3c8+ and the HCS08.   &lt;br /&gt;
&lt;br /&gt;
[[Image:PBAss2.jpg]]&lt;br /&gt;
&lt;br /&gt;
In PB, the source code for the assembler is not case-sensitive, with one exception: literal quoted text strings used in a define-byte statement. White-space (spaces, etc.), unless part of a literal quoted text string, is ignored.&lt;br /&gt;
&lt;br /&gt;
In general terms, the op code is entered in the Op column, and any arguments for the op code are entered in the OpArg column, with arguments separated by commas. Labels are entered in the Labels column. A colon may be entered after the label name, but is not required. Comments may be entered in the Comments column. No special syntax is required for comments, but a leading semicolon should be used if you expect to copy the code from Excel to a text file for use with another assembler. Column A is used for special purposes. The most common use for column A is to comment out an entire row by entering a semicolon.&lt;br /&gt;
&lt;br /&gt;
Numeric values are interpreted as decimal by default. Hexadecimal values may be used, and can be indicated either with a leading &#039;$&#039; or trailing &#039;H&#039;. Ex: $ABCD, ABCDH&lt;br /&gt;
&lt;br /&gt;
For the S3C80 assembler, register references can be indicated with a leading &#039;R&#039;, and working registers indicated with a leading &#039;W&#039;. Register references are always hexadecimal. Register-pair references using the &#039;RR&#039; or &#039;WW&#039; prefix are accepted, but not enforced. &lt;br /&gt;
&lt;br /&gt;
For example (assuming RC0 is W0), these are all equivalent as far as the assembler is concerned: RC0, RRC0, W0, WW0.&lt;br /&gt;
&lt;br /&gt;
Simple expressions may be used. The expression evaluator can only do addition, subtraction, multiplication and division, using the operators &#039;+&#039;, &#039;-&#039;, &#039;*&#039; and &#039;/&#039;, respectively. Nesting with parenthesis is allowed. Results of an expression evaluation are truncated to an integer value.&lt;br /&gt;
&lt;br /&gt;
Names of symbolic labels (and constants) must follow these rules:&lt;br /&gt;
#The first character must be a letter (A to Z)&lt;br /&gt;
#The remaining characters must be letters (A to Z),     digits (0 to 9), or an underscore (&#039;_&#039;).&lt;br /&gt;
#The name cannot evaluate to a hex value. For example,     the name &#039;A001H&#039; is invalid.&lt;br /&gt;
#For the S3C8 assembler, the name cannot look like a register reference. For example, &#039;R01&#039; and &#039;W01&#039; are invalid.&lt;br /&gt;
#Names are not case sensitive, so &#039;XYZ&#039; is the same as &#039;xyz&#039;&lt;br /&gt;
&lt;br /&gt;
===Assembly Tab User Interface===&lt;br /&gt;
&lt;br /&gt;
====[Clear Sheet]====&lt;br /&gt;
This button clears the Assembler sheet and sets the REMOTE directive on the first row to match the remote type selected on the Setup sheet. Any previously assembled binary code is erased.&lt;br /&gt;
&lt;br /&gt;
====[Load Generated Code]====&lt;br /&gt;
This button clears the Assembler sheet and sets the REMOTE directive on the first row to match the remote type selected on the Setup sheet. The protocol code generated by the settings on the Setup sheet is then disassembled and placed on the Assembler sheet. Any previously assembled binary code is replaced by the generated code.&lt;br /&gt;
&lt;br /&gt;
This makes it very convenient to use protocol-builder&#039;s Setup sheet to set the basic timing parameters as a starting point for creating a new protocol.&lt;br /&gt;
&lt;br /&gt;
====[Load Disassembly] button====&lt;br /&gt;
This button is only enabled when the Disassembly sheet contains disassembled code that was obtained by using the [Decode] button on the Setup sheet. When used, this button clears the Assembler sheet and sets the REMOTE directive on the first row to match the remote type selected by the decoder. The disassembled protocol code is then placed on the Assembler sheet. Any previously assembled binary code is replaced by the decoded protocol code.&lt;br /&gt;
&lt;br /&gt;
This makes it very convenient to use protocol-builder&#039;s decoder to disassemble an existing protocol for use as a starting point for modifying a protocol.&lt;br /&gt;
&lt;br /&gt;
====[Assemble] button====&lt;br /&gt;
This button causes the assembler to execute and assemble the source code on the Assembler sheet. The assembler fills in the Addr and Code columns with the address and binary code respectively. If an error occurs on a row, the assembler will put an error message in the Errors column. On the row containing the REMOTE directive, the Errors column will be filled in either with the number of errors, or (if no errors) the number of bytes used by the protocol.&lt;br /&gt;
&lt;br /&gt;
If the assembly completes with no errors, the resulting binary code is available for use on the Setup sheet. Checking the [Use Assembled Protocol Code] checkbox will cause the assembled code to be placed in the Protocol Code block instead of the normal PB-generated code.&lt;br /&gt;
&lt;br /&gt;
Note that the assembled code is remote-type-specific, so only those remote types for which assembled code is available will be able to use the assembled code. If the assembled code has any errors, it will not be available. If required, PB can perform vector translation, vector offset or data offset processes on the assembled code before placing it in the Protocol Code block.&lt;br /&gt;
&lt;br /&gt;
If source code for more than one type of remote is present on the Assembler sheet, the assembler processes all of them individually. An error in the source for one type of remote will not affect the assembly of source for other types. There can be only one set of source code for each of the five remote types.&lt;br /&gt;
&lt;br /&gt;
====[Use pre-defined constants] checkbox====&lt;br /&gt;
If checked, then certain pre-defined constants are loaded prior to execution of the assembler. These constants are defined such that you can override them by redefining them in your source, if desired. Below is a list of the constants that will be defined and the values for each of the remote types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                                      6805-&lt;br /&gt;
  Constant   HCS08  S3C8  S3C8+  SST  RC16/18 6805-C9  P8/740&lt;br /&gt;
  --------   -----  ----  -----  ---  ------- -------  ------&lt;br /&gt;
    DCBUF      $60   R03   R03   $5A     $5A     $5A      $5D&lt;br /&gt;
    PD00       $6A   R12   R12   $67     $67     $67      $6A&lt;br /&gt;
    PD01       $6B   R13   R13   $68     $68     $68      $6B&lt;br /&gt;
    PD02       $6C   R14   R14   $69     $69     $69      $6C&lt;br /&gt;
    PD03       $6D   R15   R15   $6A     $6A     $6A      $6D&lt;br /&gt;
    PD04       $6E   R16   R16   $6B     $6B     $6B      $6E&lt;br /&gt;
    PD05       $6F   R17   R17   $6C     $6C     $6C      $6F&lt;br /&gt;
    PD06       $70   R18   R18   $6D     $6D     $6D      $70&lt;br /&gt;
    PD07       $71   R19   R19   $6E     $6E     $6E      $71&lt;br /&gt;
    PD08       $72   R1A   R1A   $6F     $6F     $6F      $72&lt;br /&gt;
    PD09       $73   R1B   R1B   $70     $70     $70      $73&lt;br /&gt;
    PD0A       $74   R1C   R1C   $71     $71     $71      $74&lt;br /&gt;
    PD0B       $75   R1D   R1D   $72     $72     $72      $75&lt;br /&gt;
    PD0C       $76   R1E   R1E   $73     $73     $73      $76&lt;br /&gt;
    PD0D       $77   R1F   R1F   $74     $74     $74      $77&lt;br /&gt;
    PD0E       $78   R20   R20   $75     $75     $75      $78&lt;br /&gt;
    PD0F       $79   R21   R21   $76     $76     $76      $79&lt;br /&gt;
    PD10       $7A   R22   R22   $77     $77     $77      $7A&lt;br /&gt;
    PD11       $7B   R23   R23   $78     $78     $78      $7B&lt;br /&gt;
    PD12       $7C   R24   R24   $79     $79     $79      $7C&lt;br /&gt;
    PD13       $7D   R25   R25   $7A     $7A     $7A      $7D&lt;br /&gt;
    PD14       $7E   R26   R26   ---     ---     ---      ---&lt;br /&gt;
    PD15       $7F   R27   R27   ---     ---     ---      ---&lt;br /&gt;
    PD16       $80   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD17       $81   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD18       $82   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD19       $83   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1A       $84   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1B       $85   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1C       $86   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1D       $87   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1E       $88   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PD1F       $89   ---   ---   ---     ---     ---      ---&lt;br /&gt;
    PF0        $A2   R28   R28   $7B     $7B     $7B      $7E&lt;br /&gt;
    PF1        $A3   R29   R29   $7C     $7C     $7C      $7F&lt;br /&gt;
    PF2        $A4   R2A   R2A   $7D     $7D     $7D      $80&lt;br /&gt;
    PF3        $A5   R2B   R2B   $7E     $7E     ---      $81&lt;br /&gt;
    PF4        $A6   R2C   R2C   $7F     $7F     ---      $82&lt;br /&gt;
    DBYTES     $A9   R10   R10   $66     $66     $66      $69&lt;br /&gt;
    CBYTES     $AA   R11   R11   ---     ---     ---      ---&lt;br /&gt;
    FLAGS      $B3   R00   R00   $57     $57     $57      $5A&lt;br /&gt;
    XMITIR   $FF5F $0133 $0146 $C02F   $01AF   $0183    $FF00&lt;br /&gt;
&lt;br /&gt;
&#039;---&#039; above indicates the constant will not be defined.&lt;br /&gt;
&lt;br /&gt;
The constant DCBUF refers to the first byte of the device-command buffer used during protocol execution, and is ten bytes long in all of the remote types. Other bytes within the buffer may be referenced with an offset notation, i.e., DCBUF+2 refers to the third byte in the buffer.&lt;br /&gt;
&lt;br /&gt;
The constant DBYTES defines the address of the byte containing the number of device (&amp;quot;fixed&amp;quot;) bytes within DCBUF. Similarly, CBYTES defines the address of the byte containing the number of command (&amp;quot;variable&amp;quot;) bytes within DCBUF.&lt;br /&gt;
&lt;br /&gt;
FLAGS defines the address of the byte that contains the bit-toggling bit(s).&lt;br /&gt;
&lt;br /&gt;
The constant XMITIR is the address of the standard IR engine call for the remote.&lt;br /&gt;
&lt;br /&gt;
====[Add comments to Protocol Data Bytes] checkbox====&lt;br /&gt;
If checked, then the next time the assembler is executed, it will replace any comments on rows defining protocol flag or data bytes with a description of what the values represent to the IR engine. This is only done if the assembly completes with no errors.&lt;br /&gt;
&lt;br /&gt;
====[Reformat Sheet] button====&lt;br /&gt;
If, as a result of copying &amp;amp; pasting, etc. the format of the Assembler sheet gets corrupted, you can use this button to return the formatting to normal.&lt;br /&gt;
&lt;br /&gt;
As distributed, the Assembler sheet is set to Protected mode. While most operations needed in creating source code can be performed with protection in effect, some functions are not available, such as search-and-replace. You are free to turn off the sheet protection (Tools menu, Protection, Unprotect Sheet) if you prefer, but be careful not to alter the contents of rows 1 through 9, and do not insert or delete any columns in the yellow area. (Rows 1 through 5 are hidden.) The Reformat Sheet button assumes that you have not inserted or deleted any of these rows.&lt;br /&gt;
&lt;br /&gt;
====[Insert Row] and [Delete Row] buttons====&lt;br /&gt;
These buttons operate whether sheet Protection is in effect or not. The number of rows selected before clicking the button determines how many rows are inserted or deleted. Entire rows need not be selected; just selecting rows in one column will suffice. Only the yellow-colored columns will be affected, and selection of cells outside of the yellow areas will prevent the button from operating. No Undo is available after using these buttons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Assembler directives===&lt;br /&gt;
The assembler understands several special directives. These are listed below with a description of their use.&lt;br /&gt;
&lt;br /&gt;
====Remote====&lt;br /&gt;
Each set of source code for a remote must begin with the REMOTE directive in the Op column, and a valid remote type in the OpArg column. The first row of the Assembler sheet will already have the REMOTE directive entered, and a drop list of valid remote types is available in the OpArg column. This information will have to be entered manually for any additional sets of source code.&lt;br /&gt;
&lt;br /&gt;
Hint: Using the Alt-R key will enter the REMOTE directive on the current row (where cursor is), and create a droplist. Using Alt-R again will remove the droplist.&lt;br /&gt;
&lt;br /&gt;
There can be only one set of source code for each of the seven remote types. If an invalid remote type is specified, the entire block of code (until the next REMOTE directive or the end of the source code is encountered) will not be assembled.&lt;br /&gt;
&lt;br /&gt;
The valid remote types are:&lt;br /&gt;
&lt;br /&gt;
*HCS08 - This selects the 68HCS08 assembler, and sets the starting assembly address to $0100. The resulting binary code is applicable to remotes using the HCS08 type on the Setup sheet.&lt;br /&gt;
&lt;br /&gt;
*S3C8 - This selects the S3C80 assembler, and sets the starting assembly address to $8000. The resulting binary code is applicable to remotes using the S3C8 (Old) type on the Setup sheet. PB can also apply the vector translation process to make the assembled binary code available for use on S3C8 (New) remotes when S3C8+ code is not available.&lt;br /&gt;
&lt;br /&gt;
*S3C8+ - This selects the S3C80 assembler, and sets the starting assembly address to $FF00. The resulting binary code is applicable to remotes using the S3C8 (New) type on the Setup sheet. PB can also apply the same type of vector translation used in KM &amp;amp; RM to make the assembled binary code available for use on S3C8 (Old) remotes.&lt;br /&gt;
&lt;br /&gt;
*SST - This selects the 68HC05 assembler, and sets the starting assembly address to $0100. The resulting binary code is applicable to remotes using the SST type on the Setup sheet. PB can also apply a vector translation process to make the assembled binary code available for use on 6805-RC16/18 remotes when 6805-RC16/18 code is not available.&lt;br /&gt;
&lt;br /&gt;
*6805-RC16/18 - This selects the 68HC05 assembler, and sets the starting assembly address to $0100. The resulting binary code is applicable to remotes using the 6805-RC16/18 type on the Setup sheet. PB can also apply the same type of data and vector offsets used in KM &amp;amp; RM to make this binary code available for use on remotes with non-standard data or vector locations. The data locations must be manually indicated in the source by putting an underscore character in column A.  PB can also apply a vector translation process to make the assembled binary code available for use on SST remotes when SST code is not available.&lt;br /&gt;
&lt;br /&gt;
*6805-C9 - This selects the 68HC05 assembler, and sets the starting assembly address to $0100. The resulting binary code is applicable to remotes using the 6805-C9 type on the Setup sheet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*P8/740 - This selects the P8/740 assembler, and sets the starting assembly address to $0132. The resulting binary code is applicable to remotes using the P8/740 type on the Setup sheet.&lt;br /&gt;
&lt;br /&gt;
*(NONE) - This disables assembly of the entire section. Since there can only be one active section for each remote type, this value may be used to deactivate different versions for the same remote type.&lt;br /&gt;
&lt;br /&gt;
====EQU (or EQ)====&lt;br /&gt;
The EQU directive is used to define symbolic constants. The symbol name must be placed in the Label column, and must follow the naming rules for labels (see above). The OpArg column must contain an expression. The expression will be evaluated and the result assigned as the value of the symbol.&lt;br /&gt;
&lt;br /&gt;
Seperate constants for hi-byte and lo-byte values must be defined in cases where the bytes of a 16-bit value need to be referenced in the source. (The expression evaluator is limited to basic add, subtract, multiply and divide operations, and cannot and, or, xor or shift.)&lt;br /&gt;
&lt;br /&gt;
You can override the pre-defined constants added by the assembler when the checkbox option is active (see above) by redefining them in the source. Once defined in the source, you cannot redefine a constant a second time.&lt;br /&gt;
&lt;br /&gt;
Symbolic constants and labels share the same namespace, so you may not use the same name for a label and a constant.&lt;br /&gt;
&lt;br /&gt;
====DB or BYTE====&lt;br /&gt;
This directive generates binary output from one or more byte values supplied in the OpArg column. Each byte value must be separated with a comma. Examples:&lt;br /&gt;
&lt;br /&gt;
        DB      $55,73H,27&lt;br /&gt;
&lt;br /&gt;
Literal quoted text strings may also be defined with the DB or BYTE directive. The ASCII values of the text are output as byte values in the binary code.&lt;br /&gt;
&lt;br /&gt;
        DB      &amp;quot;Text string&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====DW or WORD====&lt;br /&gt;
This directive generates binary output from one or more 16-bit word values supplied in the OpArg column. Each word value must be separated with a comma. Examples:&lt;br /&gt;
&lt;br /&gt;
        DW      $5555,7373H,65530&lt;br /&gt;
&lt;br /&gt;
Note that the HCS08, S3C80 and 68HC05 assemblers output word values in high-byte, low byte order, wheras the P8/740 assembler outputs word values in the opposite order. Use caution when using words to define protocol data values with the P8/740 assembler; it may be best to use byte definitions to prevent errors.&lt;br /&gt;
&lt;br /&gt;
====XORG====&lt;br /&gt;
The XORG directive sets the target location counter. The OpArg column&lt;br /&gt;
must contain an expression.&lt;br /&gt;
&lt;br /&gt;
Initially, the target location counter is the same as the current location counter. The XORG directive is useful when writing code that will be executed at a different address than the assembled code. While generally not used in writing protocols, it might be useful to authors of special protocols to be used with extenders.&lt;br /&gt;
&lt;br /&gt;
The target location counter affects calculation of relative branches, and values of labels.&lt;br /&gt;
&lt;br /&gt;
The target location counter may be restored to match the current location counter by setting it to &#039;.&#039;. (The dot special symbol returns the value of the current location counter.)&lt;br /&gt;
&lt;br /&gt;
====WREG, WREGL and WREGH====&lt;br /&gt;
These directives are only valid for the S3C80 assembler. The OpArg column must contain an expression, or the special arguments ON or OFF.&lt;br /&gt;
&lt;br /&gt;
The WREG directives used with an expression argument tell the assembler which registers are to be used as the working registers for purposes of assembling the code. WREG sets both the low and high working registers, while WREGL and WREGH set the low and high registers separately. The assembler will accept any values from 0 to $F0 ($F8 for WREGL &amp;amp; WREGH) where the lower three bits are zero. At the start of assembly, the initial setting of the working registers is equivalent to WREG $C0.&lt;br /&gt;
&lt;br /&gt;
The assembler will use the working register setting to automatically convert register references to working register references. For some instructions, there are forms that will accept either normal register references or working register references, with the latter using fewer bytes in the instruction, and usually executing faster. In cases where you want to use the longer instruction form, you will need to use the WREG special argument OFF. The assembler will then not allow any working register conversion for those instructions. To return the assembler to normal, use the WREG special argument ON.&lt;br /&gt;
&lt;br /&gt;
For example, with the default settings (WREG set to ON and WREG set to $C0), the following are all equivalent, and produce the same binary code:&lt;br /&gt;
&lt;br /&gt;
      =00C0    SYMB1   EQU   C0H&lt;br /&gt;
      09 01            LD    R01,W0&lt;br /&gt;
      09 01            LD    R01,RC0&lt;br /&gt;
      09 01            LD    R01,C0H&lt;br /&gt;
      09 01            LD    R01,SYMB1&lt;br /&gt;
&lt;br /&gt;
With WREG set to OFF, the same source produces the longer form of the&lt;br /&gt;
instruction:&lt;br /&gt;
&lt;br /&gt;
      =00C0    SYMB1   EQU   C0H&lt;br /&gt;
                       WREG  OFF&lt;br /&gt;
      E4 C0 01         LD    R01,W0&lt;br /&gt;
      E4 C0 01         LD    R01,RC0&lt;br /&gt;
      E4 C0 01         LD    R01,C0H&lt;br /&gt;
      E4 C0 01         LD    R01,SYMB1&lt;br /&gt;
                       WREG  ON&lt;br /&gt;
&lt;br /&gt;
Some or all of the address modes of the following instructions are affected by the WREG ON/OFF setting:&lt;br /&gt;
 LD, INC, ADC, ADD, AND, CP, OR, SBC, SUB, TCM, TM, XOR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====OTHER/MISCELLANEOUS====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The &#039;.&#039; symbol&#039;&#039;&#039;&lt;br /&gt;
The dot (&#039;.&#039;) symbol returns the value of the current location counter. The current location counter specifies the address at which the instruction/data bytes will reside. You may use the dot in any expression. For example, the following code jumps to the branch instruction in an endless loop:&lt;br /&gt;
&lt;br /&gt;
      JR    .   (S3C80)&lt;br /&gt;
      BRA   .   (HCS08, 68HC05 &amp;amp; P8/740)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Column A&#039;&#039;&#039;&lt;br /&gt;
Column A of the Assembler sheet is used for special purposes. Below&lt;br /&gt;
are the currently available uses for this column.&lt;br /&gt;
&lt;br /&gt;
#A semicolon (;) anywhere in the text in column A will cause the entire row to be treated as a comment. This is useful if you are trying several different approaches and want to retain the source code for other approaches for reference while developing a new approach.&lt;br /&gt;
#Under some circumstances, protocol binaries are subjected to a vector translation or vector offset process. Calls and Jumps to certain addresses are altered to refer to different addresses in this process. While it is unlikely, it is possible that data bytes or other code within the protocol might appear to be a call or jump instruction. If this occurs, you can flag a specific row so that it cannot be considered for this process by putting a dot in column A. This will cause a dot to be used as a delimiter between the bytes in the code column, which will prevent the vector translation/offset process from changing those bytes. The dot is only effective if more than one byte is generated on the row where it is used. Code exported to KM or RM (see below) will also contain the dot.&lt;br /&gt;
#Under some circumstances, protocol binaries need to be subjected to a data offset process. References to certain data addresses are then altered to refer to different addresses in this process. At this time, only the 6805-RC16/18 remote types require this. References to the protocol data (PDxx) and protocol flag (PFx) bytes must be flagged with an underscore in column A to allow this process to recognize the references. This will cause an underscore to be used as a delimiter between the bytes in the code column. Code exported to KM or RM (see below) will also contain the underscore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Adding to Keymap Master (KM)==&lt;br /&gt;
In KM, you should select &amp;quot;Manual Settings&amp;quot; as the protocol and you should cut &amp;amp; paste the protocol code generated by PB into the Notes panel.  (You can still enter notes there too, if you like, KM will find the protocol).  You should also select OBC for the button codes.&lt;br /&gt;
&lt;br /&gt;
When you select &amp;quot;Manual Settings&amp;quot; a new set of options appears in the lower left hand side of the screen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PID:&#039;&#039;&#039; this is the protocol id that you used in PB.&lt;br /&gt;
&#039;&#039;&#039;2nd Cmd Byte:&#039;&#039;&#039; this is only relevant for signals with more than 1 byte of variable data.&lt;br /&gt;
&#039;&#039;&#039;Signal Style:&#039;&#039;&#039; Sometimes this one is a crap-shoot.  Take a look at the binary signals shown in the codes3.txt file.  Ideally, you would notice that the numbers increase from the left (LSB) or the right (MSB) when you’re looking at the data for the numeric buttons, but that&#039;s not exactly the case here.  However, you should notice that the last 2 bits on the right stay constant whereas the bits on the left change constantly, therefore I&#039;m going to make the call that this protocol is LSB. Use of one of the -COMP styles implies that you got the ‘1’ and &#039;0&#039; pairs reversed, which is not typically the case for a protocol that you created yourself.&lt;br /&gt;
&#039;&#039;&#039;Bits/Dev:&#039;&#039;&#039; this should match what you selected in PB.&lt;br /&gt;
&#039;&#039;&#039;Bits/Cmd:&#039;&#039;&#039; this should match what you selected in PB.&lt;br /&gt;
&lt;br /&gt;
So far, so good, but now you need to enter the functions and their OBCs in the Functions sheet, so you need to figure out what they are, and you still need to figure out what to enter as the device code for this upgrade.&lt;br /&gt;
&lt;br /&gt;
codes4.txt (from the [http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2304 zip file]) is a cleaned up version of codes3.txt with just one line per signal.  You should open this file using Excel.  Select &amp;quot;fixed width&amp;quot; and make sure all the columns are treated as text.  You should end up with a sheet that looks like this...&lt;br /&gt;
&lt;br /&gt;
[[Image:codes4-txt.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The first two columns show the lead in times and the last two show the lead out times, so you can delete those.  As we determined that the signal style is LSB, in order to convert the binary signals to decimal, we will need to read them backwards.  The easiest way to reverse the order of binary patterns in Excel is to use the MID function.  The following formula would reverse the order of an 8 bit binary pattern in cell A1: &lt;br /&gt;
&lt;br /&gt;
= mid(a1,8,1)&amp;amp; mid(a1,7,1)&amp;amp; mid(a1,6,1)&amp;amp; mid(a1,5,1)&amp;amp; mid(a1,4,1)&amp;amp; mid(a1,3,1)&amp;amp; mid(a1,2,1)&amp;amp; mid(a1,1,1)&lt;br /&gt;
&lt;br /&gt;
Assuming that the two columns of binary are now in columns A and B, you could enter this foruma in column C and then copy it to column D, which would give you two columns of binary where the data from columns A and B are reversed.&lt;br /&gt;
&lt;br /&gt;
You could then use the following formula in column E to convert the command codes to decimal: &lt;br /&gt;
&lt;br /&gt;
 =bin2dec(c1)&lt;br /&gt;
&lt;br /&gt;
You could then copy this formula to column F in order for it to convert the device codes to decimal.  You should end up with a sheet that looks like this (I added column headings to help illustrate the fields).  (I have included this spreadsheet in the [http://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2304 zip file], it’s called codes4.xls) &lt;br /&gt;
&lt;br /&gt;
[[Image:codes4-txt2.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Therefore, the device code for our upgrade is 58, and the OBCs for the numeric buttons are as shown.  &lt;br /&gt;
&lt;br /&gt;
The Setup sheet in KM should look like this...&lt;br /&gt;
&lt;br /&gt;
[[Image:PB-KM-sheet.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Adding to Remote Master (RM)==&lt;br /&gt;
&lt;br /&gt;
There are several ways to get a custom protocol into a RM.  &lt;br /&gt;
&lt;br /&gt;
You can create a custom protocols.ini entry, but if the official JP1 protocols.ini is not changed, the RDMU file will be unusable by the rest of the community.  If you have Microsoft Excel you can create a KM upgrade and then open it in RM.  You can also create a self-contained RDMU with a custom protocol.  If you have Excel it is recommended that you create a KM sheet because it can be accessed by both KM and RM, but there are still advantages to doing development work in RM .  RM lets you work directly with the hex, which can do the OBC and EFC calculations for you.  &lt;br /&gt;
&lt;br /&gt;
In this document we are going to show you how to create a self-contained RDMU file.  It is an easy process but not intuitive.&lt;br /&gt;
&lt;br /&gt;
In RM, you begin by accessing the New Manual Protocol option from the Advanced Menu.  This was known as the “Manual Protocol” option in earlier versions of RM.  In RMIR, after a remote image has been loaded (by opening a *.RMIR or *.IR file, downloading from a remote, or by File\New\RemoteImage), use the Protocols tab and click New.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:PBRMsetup.jpg]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In RM 2.02 Alpha 10a, when the manual settings screen comes up, the “Import Protocol Upgrade” is not enabled until you touch the Protocol Code box. &lt;br /&gt;
&lt;br /&gt;
[[Image:PBRMsettings.jpg]]  &lt;br /&gt;
&lt;br /&gt;
Pressing the Import Protocol Upgrade button will import a formatted protocol that was copied to the clipboard in PB.  In this case the clipboard contained this protocol from PB.&lt;br /&gt;
&lt;br /&gt;
 Upgrade protocol 0 = 01 FF (HCS08) Dimmer (PB v4.01)&lt;br /&gt;
    20 11 1F 4A 01 84 01 00 08 09 D8 03 63 00 D2 09 &lt;br /&gt;
    F3 41 D2 CC FF 5F  &lt;br /&gt;
 End&lt;br /&gt;
&lt;br /&gt;
RM analyzes the protocol, finds the protocol ID to be 01FF and the processor type to be HCS08 and inserts it into the proper protocol code area.  RM also analyzes the protocol to see how many device and function bytes are called for.  &lt;br /&gt;
&lt;br /&gt;
Note:  If the protocol code next to any given processor is enabled (black instead of gray), you can manipulate the protocol bytes directly by double clicking on protocol code.&lt;br /&gt;
&lt;br /&gt;
If you click on the HCS08, you can see the disassembly for the protocol upgrade in the right hand panel.  A quick glance at the disassembly can be helpful in making sure that you had the correct data on the clipboard.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBRMsource.jpg]]&lt;br /&gt;
&lt;br /&gt;
In the lower left corner of the manual settings page there will be an area where you can tell RM how to handle data.  This area will look different depending on the protocol that you imported.  You can tell RM if the data is LSB- Least significant bit first.  You can tell RM whether the data needs to be Comp (complemented 0 is 1 and 1 is 0).  Although the number of bits per devices and commands  have already been specified in PB, the user can overide this if a complex protocol needs to perform some bit manipulation from within the executor.  If the protocol requires multiple bytes per function, you can specify the command index, which tells RM whether the OBC portion is the first hex byte or the second hex byte.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
[[Image:PBRMdevicedata.jpg]]&lt;br /&gt;
&lt;br /&gt;
Once the protocol settings are complete, click OK.  You must now change the PID on the Setup tab to match your protocol update. (If using RMIR, first change to the Devices tab, and click New.) It will be at the bottom of the protocol list.  The code will only appear on the list if a protocol has been entered for the processor type of the chosen remote.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBRMpickPID.jpg]] &lt;br /&gt;
&lt;br /&gt;
Note: The custom protocol MUST be selected on the Setup tab before you can make any changes to the custom protocol&#039;s manual settings.  &lt;br /&gt;
&lt;br /&gt;
To revisit the manual settings page, click Advanced\Edit Protocol.  This will open the protocol currently selected on the Setup tab, so be sure your custom protocol is selected.  (In RMIR, if an upgrade is using the custom protocol, click the protocol name or PID on the Devices tab.) &lt;br /&gt;
&lt;br /&gt;
If you have already worked on the function page and then realize you need to make corrections to the Manual Settings Page, it is important that you check your “Primacy” settings before making the changes, so that you don’t corrupt all your data.  Any changes to LSB, Comp, # of bits or Command Index will change the way calculations are performed.   The Primacy setting lets you determine whether you want the OBC or EFC/Hex to be preserved when you change the calculation method. The Primacy setting is found in the Advanced Menu in RM, as shown below.&lt;br /&gt;
&lt;br /&gt;
[[Image:PBRMprimacy.jpg]]&lt;br /&gt;
&lt;br /&gt;
So far, so good, but now you need to enter the functions in the Functions sheet, so you need to figure out what they are.  You can calculate the OBC&#039;s or you can enter the hex that you need and let RM compute the OBC&#039;s.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=IR_Help&amp;diff=3407</id>
		<title>IR Help</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=IR_Help&amp;diff=3407"/>
		<updated>2025-11-23T00:08:38Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Written by [https://www.hifi-remote.com/forums/memberlist.php?mode=viewprofile&amp;amp;u=1350 vickyg2003]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There is so much to learn about JP1. It’s a fascinating subject, but chances are if you are reading this, all you want to do is control your TV, VCR and DVD using 1 remote. This is my attempt to create a guide on how to use IR and the supporting tools. But keep in mind that the software is continually evolving and this document was last updated in the summer of 2010.&lt;br /&gt;
&lt;br /&gt;
This is compiled from many posts and articles I read in the JP1 forum. I’ve borrowed freely from what I’ve read on the JP1 site at hifi-remotes.com, and from the old Yahoo site. My thanks to everyone on the JP1 experts who created the tools and shared their knowledge. - [[User:Vickyg2003|Vickyg2003]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chapter 1 - Getting Started&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[JP1 or JP1x]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Remote basics]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[RDFs]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR.EXE Safety]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[How can I reset my remote?]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Files to run the JP1 Tools]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 2 - Next Steps&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Connecting IR to your remote]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s Display]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s Menus]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s General Tab]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[IR&#039;s CodeSelector]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Sorts and Moves]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Macros]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Key Moves]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Learned Signals]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Fav Scan]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 3 - Intermediate Programming&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Remote Memory Usage]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Device Upgrades]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Using KM, Keymap-Master, to create a device upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Using RM, RemoteMaster, to create a device upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Protocol Upgrades]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Creating a Better Upgrade]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[EFCs and OBCs]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 4 - Advanced Programming&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Extenders]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Special Protocols]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 5 - Finding Codes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Finding Codes]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 6 - Modem Upgradeable Remotes&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[WAV FILES]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Chapter 7 - The Glossary&#039;&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Glossary]]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Remote_Master_Manual&amp;diff=3406</id>
		<title>Remote Master Manual</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Remote_Master_Manual&amp;diff=3406"/>
		<updated>2025-11-23T00:07:42Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Opening Screen ===&lt;br /&gt;
[[image:RM-Intro.jpg]]&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Preface&#039;&#039;&#039;===&lt;br /&gt;
Open Source UEI Remote Control Upgrade Manager.  This software was intended to author remote updates for your JP1 compatible remote.  It was designed to replace and extend the JP1 software. The ultimate goal is to combine the function of IR and the KeymapMaster Excel spreadsheet into a single application.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Requirements&#039;&#039;&#039;===&lt;br /&gt;
====&#039;&#039;&#039;Hardware&#039;&#039;&#039;====&lt;br /&gt;
====&#039;&#039;&#039;Software&#039;&#039;&#039;====&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Get Started&#039;&#039;&#039;===&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;If you haven&#039;t already, download and install Java version 6.0 or later. You can download it from the [http://java.sun.com/javase/downloads/index.jsp J2SE Download] page. Either the Java Developer Kit (JDK) or the Java Runtime Environment (JRE) will do. &lt;br /&gt;
Download the latest version of Remote Master from [https://sourceforge.net/project/showfiles.php?group_id=30560&amp;amp;package_id=22596 SourceForge], and unzip it to the directory of your choice, preserving directory names. &lt;br /&gt;
Download the latest version of the [https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=6160 Maps and Images required for RM] from the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 Main] [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=7 Tools] section of the [https://www.hifi-remote.com/forums/dload.php File Section] of the [https://www.hifi-remote.com/forums/ JP1 Remotes Forums]. &lt;br /&gt;
Unzip it to the folder of your choice, creating a maps sub-folder containing all the maps and images. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;If you haven&#039;t already, download the lastest version of the [https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=5338 RDF files needed for IR and RM] from the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=81 Main] [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=7 Tools] section of the [https://www.hifi-remote.com/forums/dload.php File Section] of the [https://www.hifi-remote.com/forums/ JP1 Remotes Forums].&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Unzip it to the folder of your choice. It is recommended that you do NOT place it in the same directory as you placed Remote Master.&lt;br /&gt;
&lt;br /&gt;
Note: You must have RDFs for all supported remotes in order for RM to work correctly when importing or loading device upgrades that were created for remotes other than the one(s) you will be using.&lt;br /&gt;
&lt;br /&gt;
If you are using a version of Windows (95/98/NT/XP/Vista/Windows 7), double-click on Setup.vbs. &lt;br /&gt;
This will create shortcuts in Start &amp;gt; Programs &amp;gt; Remote Master for your use. Feel free to send them to you Desktop or copy them to your Quick Launch toolbar. File associations are also created for .rmdu and .rmir file, so you can just double-click on them directly.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it, Remote Master is now ready for your use! There are a few different ways to start Remote Master: &lt;br /&gt;
&lt;br /&gt;
Click on the Remote Master or RMIR shortcut in Start &amp;gt; All Programs &amp;gt; Remote Master&lt;br /&gt;
Non-windows users should use the rmaster.sh and rmir.sh scripts.&lt;br /&gt;
&lt;br /&gt;
Double-click on a .rmdu or .rmir file. &lt;br /&gt;
In your browser, click on a link to a *.rmdu or *.rmir file. &lt;br /&gt;
There is a short tutorial available for RM. See [[JP1 - Just How Easy Is It? - RM-IR Version]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;User Interface&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Command Bar&#039;&#039;&#039;====&lt;br /&gt;
The Remote Master menu bar provides access to general functions and options. &lt;br /&gt;
&lt;br /&gt;
[[image:Rm_cb_prev.jpg]]&lt;br /&gt;
=====&#039;&#039;&#039;File&#039;&#039;&#039;=====&lt;br /&gt;
The File menu provides ways to load and save Device Upgrade files. Below are the menu items available, and what they do:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[image:Rm_cb_file.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;New&#039;&#039;&#039; - :Set all upgrade information to default values, as though starting from scratch.&lt;br /&gt;
:&#039;&#039;&#039;Open...&#039;&#039;&#039; - Bring up a file dialog allowing you to load an existing RemoteMaster Device Upgrade file (*.rmdu). To load a KeymapMaster Device Upgrade file (*.txt), change the Files of type: field to KeyMapMaster device upgrade files.&lt;br /&gt;
:&#039;&#039;&#039;Save&#039;&#039;&#039; - This menu will save the device upgrade to a file. This item will be diabled unless a RemoteMaster Device Upgrade file was loaded, or the &amp;quot;Save as...&amp;quot; item has been used.&lt;br /&gt;
:&#039;&#039;&#039;Save as...&#039;&#039;&#039; -     Save the device upgrade to a different file name. The default file name will be the name of the file loaded, or the name used for &amp;quot;Save as...&amp;quot;, or the contents of the Description field. &lt;br /&gt;
:&#039;&#039;&#039;Import from Clipboard&#039;&#039;&#039; - Imports a device upgrade from the clipboard. This is useful if you click on a link to a device upgrade (either KM or RM), and your browser simply displays the text of the upgrade. Simply use the context-menu (right-click) to Select All and then Copy the entire upgrade to the clipboard. &lt;br /&gt;
:&#039;&#039;&#039;Recent&#039;&#039;&#039; -     Lists up to the 10 most recently opened, or saved, RM device upgrade files.&lt;br /&gt;
:&#039;&#039;&#039;Exit&#039;&#039;&#039; - Exit Remote Master&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Options&#039;&#039;&#039;=====&lt;br /&gt;
The Options menu provides ways to customize Remote Master&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[image:Rm cb opt prev.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Look and Feel&#039;&#039;&#039; - Allows you to select the over all look and feel used by RemoteMaster. Most Windows users will want to use the Windows Look and Feel, but I recommend the Metal Look and Feel. The reason for this is simple: the Windows Look and Feel does not highlight the current cell in the Functions panel. &lt;br /&gt;
:[[Image:Rm cb opt lf.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Font Size&#039;&#039;&#039; - Allows you to increase or decrease the size of the fonts used by RemoteMaster.&lt;br /&gt;
:[[Image:Rm cb opt fs.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Prompt to Save&#039;&#039;&#039; - Allows you to specify when Remote Master will prompt you to save your Device Upgrade. The valid values are:  &lt;br /&gt;
:[[Image:Rm cb opt pts.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Remotes&#039;&#039;&#039; - Allows you to choose the set of remotes that RemoteMaster will display. Your choices are All, meaning all remotes for which RemoteMaster can find Remote Definition Files (RDFs), or Preferred, meaning only those remotes that are in your preferred list. &lt;br /&gt;
:[[Image:Rm cb opt rem.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Function names&#039;&#039;&#039; - Allows you to choose the function names used when creating a new upgrade. Your choices are Default, meaning the same as KM, or Custom, meaning your own custom list.&lt;br /&gt;
&lt;br /&gt;
:You can edit the list of custom names using Edit custom names.... When editing the custom names, there is a button to import the names of the buttons on the current remote.  &lt;br /&gt;
:[[Image:Rm cb opt fn.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Show remote signature&#039;&#039;&#039; - This option display&#039;s the remote&#039;s signature in () after the remote name.  This if very helpful when dealing with remotes with confusing names like the Atlases or the Comcast remotes.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Folders&#039;&#039;&#039; - If you have decided to reorganize your file system after the initial RM installation, use this option to locate the RDF&#039;s or Map&#039;s and Images for RM and RMIR.&lt;br /&gt;
:[[Image:Rm cb opt fold.jpg]]&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Advance&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:Rm cb advanced.jpg]]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Primacy&#039;&#039;&#039; - This option  allows users to choose whether to preserve the OBCs or the Hex when making protocols changes.  Typically this should be should be set to OBC, to make sure the signal is correct.  Hex is executor specific, so preserving the Hex can change the output.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Edit Protocol&#039;&#039;&#039; - This option allows the manual settings for the current protocol to be changed.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;New Manual Settings&#039;&#039;&#039; - Sometimes a protocol requires a custom executor.  A custom executor may be needed for an unrecognized signal, or it might just be a simple tweak to control the number of repeats being sent.  Currently we use Protocol Builder (PB) a Microsoft Excel Worksheet to compile a new executor, and then use this option to import the protocol.  See [https://www.hifi-remote.com/wiki/index.php?title=PB:_Adding_to_Remote_Master_%28RM%29 Adding a PB Protocol to Remote Master] to see the step by step process.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Import Raw Upgrade&#039;&#039;&#039; - If you found an upgrade posted in the forum, but the RDMU or KM TXT file is not available, by pasting the guts of the upgrade, and identifying the remote it was created for, RM can reverse engineer the upgrade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Import Binary Upgrade&#039;&#039;&#039; -This creates an RDMU from a Slingbox BIN file.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Export Binary Upgrade&#039;&#039;&#039; - This creates a BIN file for use with a Slingbox or similar device.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Help&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:Rm cb help.jpg]]&lt;br /&gt;
&lt;br /&gt;
:Readme&lt;br /&gt;
:Tutorial&lt;br /&gt;
:Home Page&lt;br /&gt;
:Forums&lt;br /&gt;
:Check for updates&lt;br /&gt;
:About...&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Definition Header&#039;&#039;&#039;====&lt;br /&gt;
[[Image:RM_Description.jpg]]&lt;br /&gt;
:&#039;&#039;&#039;Description&#039;&#039;&#039; – Fill this field in with the brand and model of the device being controlled&lt;br /&gt;
:&#039;&#039;&#039;Remote&#039;&#039;&#039; – This field must be filled in with the target remote.  If this field is incorrect the upgrade will not function correctly.  Failing to select the correct remote is the most common newbie error.&lt;br /&gt;
:&#039;&#039;&#039;Device Type&#039;&#039;&#039; – The device type determines which keys will be available without needing to use keymoves.  The device type may effect things like volume punch through, but does not determine what type of equipment can be controlled.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Tabs&#039;&#039;&#039;====&lt;br /&gt;
[[Image:RM_Tabs.jpg]]&lt;br /&gt;
=====&#039;&#039;&#039;Setup Tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Setup_Tab.jpg]]&lt;br /&gt;
:&#039;&#039;&#039;Setup Code&#039;&#039;&#039; – The setup code needs to be a number between 0000 and 2047 for most remotes, however some of the newer remotes allow a range of 0000-4095.  &lt;br /&gt;
:&#039;&#039;&#039;Protocol&#039;&#039;&#039; – The protocol is selected from the drop down.  Each protocol has a Protocol ID or PID.&lt;br /&gt;
:&#039;&#039;&#039;Protocol Parameters&#039;&#039;&#039; – The protocol parameters will change depending on the protocol selected.  Fill in the device numbers, sub devices that were found in the signal decode.  Note a zero is not the same as a blank.  Do not fill in a sub device if none was reported in the decode.  Examine the decode carefully.  For this example the decode would be Nec1 1.252 or Nec1 Device 1 sub device 252.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Functions Tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Functions_Tab.jpg]]&lt;br /&gt;
&lt;br /&gt;
The Function Tab is used to create a list of all the buttons on the OEM remote. &lt;br /&gt;
:&#039;&#039;&#039;#&#039;&#039;&#039; - is the line identifier.&lt;br /&gt;
:&#039;&#039;&#039;Name&#039;&#039;&#039; – Name represents the labeling on the OEM remote.  When you are creating the function list, make sure to note double functioning. Often your OEM remote buttons are used to do different functions. They may have small print on or above the buttons, that indicates those functions. That is important information. If you don’t have the OEM remote in front of you its difficult to imagine for example, that the “pause button” for playback, might also be the “up button” when you are in working in the menus. The best way to handle this is to use a compound function name (eg, &amp;quot;pause/up_arrow&amp;quot;).&lt;br /&gt;
:&#039;&#039;&#039;EFC5&#039;&#039;&#039; – This column only appears for remotes that can handle 5 digit EFCs.  Remotes manufactured prior to 2005 only do 3 digit EFCs.&lt;br /&gt;
:&#039;&#039;&#039;EFC&#039;&#039;&#039; – When signals are decoded an EFC may be reported, but if you are using a non-standard protocol executor, the EFC is unreliable, and you should use the OBC instead.&lt;br /&gt;
:&#039;&#039;&#039;OBC&#039;&#039;&#039; – The Original Button Code, is the function to be represented in the infrared signal.  Use this column for data entry when possible.&lt;br /&gt;
:&#039;&#039;&#039;HEX&#039;&#039;&#039; – RM allows entry in the Hex column.  This is useful to protocol developers, but leads to confusion to new users because this hex does not correspond to the hex reported in a LIRC file or a manufacturer’s infrared spec.&lt;br /&gt;
:&#039;&#039;&#039;Action Bar&#039;&#039;&#039; &lt;br /&gt;
::&#039;&#039;&#039;New&#039;&#039;&#039;- Inserts a new line&lt;br /&gt;
:: &#039;&#039;&#039;Delete&#039;&#039;&#039; - Deletes the current line, (might not be active if the function has been assigned to a button on the buttons tab.&lt;br /&gt;
:: &#039;&#039;&#039;Clean Up&#039;&#039;&#039; - Deletes all lines with now function codes.&lt;br /&gt;
::&#039;&#039;&#039;Up&#039;&#039;&#039; - Moves the highlighted line up in the list.&lt;br /&gt;
::&#039;&#039;&#039;Down&#039;&#039;&#039; - Moves the highlighted line down in the list.&lt;br /&gt;
::&#039;&#039;&#039;Copy&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Paste&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Paste (IE)&#039;&#039;&#039; - Internet Explorer handles the clipboard differently than most programs.  This allows for pasting from Internet explorer.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;External Functions tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_External_Functions_Tab.jpg]]&lt;br /&gt;
Sometimes you need functions from another setup code/upgrade in order to get a complete function list.  These functions would be setup as keymoves.  The External Functions tab allows these to be included when you assign functions to buttons.  The grid will contain all the information that is necessary to setup a keymove.  Device/Setup code&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Grid&#039;&#039;&#039; &lt;br /&gt;
::&#039;&#039;&#039;#&#039;&#039;&#039; - Line number&lt;br /&gt;
::&#039;&#039;&#039;Name&#039;&#039;&#039; – Function name&lt;br /&gt;
::&#039;&#039;&#039;Device Type&#039;&#039;&#039; – Device type of external setup code.&lt;br /&gt;
::&#039;&#039;&#039;Setup Code&#039;&#039;&#039; – External setup code. &lt;br /&gt;
::&#039;&#039;&#039;Type &#039;&#039;&#039;– Specifies the type of data is being entered EFC/Hex&lt;br /&gt;
::&#039;&#039;&#039;EFC/Hex&#039;&#039;&#039; – information for the keymove function.&lt;br /&gt;
::&#039;&#039;&#039;Notes&#039;&#039;&#039; – Notes about the function&lt;br /&gt;
:&#039;&#039;&#039;Action Bar&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;New&#039;&#039;&#039; – Adds a new line.&lt;br /&gt;
::&#039;&#039;&#039;Delete&#039;&#039;&#039; – Deletes the current line&lt;br /&gt;
::&#039;&#039;&#039;Clean up&#039;&#039;&#039; – Deletes any functions that do not have a function code&lt;br /&gt;
::&#039;&#039;&#039;Up &#039;&#039;&#039; - Moves the selected line up&lt;br /&gt;
::&#039;&#039;&#039;Down &#039;&#039;&#039; - Moves the selected line down&lt;br /&gt;
::&#039;&#039;&#039;Copy &#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Paste&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Paste (IE)&#039;&#039;&#039; - A paste that handles an IE (Internet Explorer) clipboard.&lt;br /&gt;
::&#039;&#039;&#039;Import&#039;&#039;&#039; – Opens an upgrade file to add the &amp;quot;available functions&amp;quot; &lt;br /&gt;
: The Import screen looks like this.&lt;br /&gt;
&lt;br /&gt;
[[Image:RM_External_Function_Import.jpg|right]]&lt;br /&gt;
::Import Controls&lt;br /&gt;
::: Select all&lt;br /&gt;
::: Select None&lt;br /&gt;
::: Toggle - Reverses all the selection marks&lt;br /&gt;
::: Ok - adds the selected functions to the external function grid&lt;br /&gt;
::: Cancel - aborts selections.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Buttons tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Buttons_Tab.jpg]]&lt;br /&gt;
RM has two tabs for assigning functions to buttons.  The Buttons tab is a textual interface, the Layout tab is a graphical interface.  On this tab, you use have three methods of associating functions with a button.  &lt;br /&gt;
:1) Press the Auto Assign button attempts to match the functions to the buttons by name.&lt;br /&gt;
:2) You can drag and drop a function from the Available Functions area to the Function cell, or the Shift cell, or xShift cell if that feature is available.  .&lt;br /&gt;
:3) You can double click on a function, shift or xshift cell and then pick the desired function from a list.&lt;br /&gt;
:&#039;&#039;&#039;The Grid&#039;&#039;&#039; &lt;br /&gt;
::&#039;&#039;&#039;Button&#039;&#039;&#039; - These cells contain a list of buttons on the remote,&lt;br /&gt;
::&#039;&#039;&#039;Function&#039;&#039;&#039; – These cells contain the function name assigned to the button.&lt;br /&gt;
::&#039;&#039;&#039;Shift&#039;&#039;&#039; refers to an alternate function that is accessed by pressing a special key such as SET prior to pressing the button&lt;br /&gt;
::&#039;&#039;&#039;Available Functions&#039;&#039;&#039; – is a list of the functions that were entered on the functions tab.&lt;br /&gt;
:&#039;&#039;&#039;Action Bar&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Auto Assign&#039;&#039;&#039; – attempts to assign functions by matching up the name of the function to the button. &lt;br /&gt;
::&#039;&#039;&#039;Remove&#039;&#039;&#039; – Deletes the function from the current cell&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Layout tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Layout_Tab.jpg]]&lt;br /&gt;
RM has two tabs for assigning functions to buttons.  The Layout tab is a graphical interface, the Buttons tab is a textual interface.  &lt;br /&gt;
On this tab, buttons with assigned functions are colored in yellow, and buttons that are present in the key map for the selected device type are outlined in orange.  When a button is selected it will be outlined in white, and the button name and associated function name will appear in the field.  On this tab functions can be assigned to buttons in 4 different ways:  &lt;br /&gt;
:1.	Press the Auto assign button to get some functions automatically assigned. The ones that get assigned automatically are the ones where you used the default function names and there&#039;s an equivalent button on your JP1 remote for that function. You are under no obligation to accept these default assignments. &lt;br /&gt;
:2.	Drag-n-drop a function onto the desired button &lt;br /&gt;
:3.	Right-click on a button and select the desired function &lt;br /&gt;
:4.	Click on a button (it will turn white), then double-click the desired function. &lt;br /&gt;
:&#039;&#039;&#039;Mode&#039;&#039;&#039; &lt;br /&gt;
::&#039;&#039;&#039;Normal&#039;&#039;&#039; – Normal function.&lt;br /&gt;
::&#039;&#039;&#039;Shift &#039;&#039;&#039; - refers to an alternate function that is accessed by pressing a special key such as SET prior to pressing the button&lt;br /&gt;
::&#039;&#039;&#039;xShift&#039;&#039;&#039; - refers to an alternate function often available when an extender is installed.  This alternate function is accessed by pressing a special button prior to pressing the named button.&lt;br /&gt;
:&#039;&#039;&#039;Available Functions&#039;&#039;&#039; – is a list of the functions that were entered on the functions tab.&lt;br /&gt;
:&#039;&#039;&#039;Action Bar&#039;&#039;&#039;&lt;br /&gt;
::&#039;&#039;&#039;Auto Assign &#039;&#039;&#039;– attempts to assign functions by matching up the name of the function to the button. &lt;br /&gt;
::&#039;&#039;&#039;Remove&#039;&#039;&#039; – Deletes the function from the current cell&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Key Map tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Keymap_Tab.jpg]]&lt;br /&gt;
The purpose of this tab is to provide print capability for documentation purposes.  The grid is described under the Buttons tab.&lt;br /&gt;
&lt;br /&gt;
=====&#039;&#039;&#039;Output tab&#039;&#039;&#039;=====&lt;br /&gt;
[[Image:RM_Output_Tab.jpg]]&lt;br /&gt;
The output tab is used to transfer an upgrade from RM to IR.EXE.   If you are using RMIR, this process is automated.  &lt;br /&gt;
&lt;br /&gt;
[[Image:RM_Copy_Icon.jpg|left]]This button is a copy button.  There is a copy button above the Device Upgrade and the Protocol Upgrade box.  &lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
To transfer the device from RM to IR follow these steps.&lt;br /&gt;
:1. Switch to IR.&lt;br /&gt;
:2. Navigate to the Device Tab&lt;br /&gt;
:3. Select Add&lt;br /&gt;
:4. Switch to RM&lt;br /&gt;
:5. Press the Copy button above the Device Upgrade&lt;br /&gt;
:6. Switch back to IR&lt;br /&gt;
:7. Paste the upgrade&lt;br /&gt;
:8. Press Ok.&lt;br /&gt;
&lt;br /&gt;
Note that the Protocol Upgrade box is empty and there is a message that &amp;quot;Upgrade Protocol NOT REQUIRED&amp;quot; in the example above.  If there had been a protocol in the box, the protocol would have to be transferred to IR.exe.  &lt;br /&gt;
:1. Switch to IR.&lt;br /&gt;
:2. Navigate to the Protocol Tab&lt;br /&gt;
:3. Select Add&lt;br /&gt;
:4. Switch to RM&lt;br /&gt;
:5. Press the Copy button above the Protocol Upgrade&lt;br /&gt;
:6. Switch back to IR&lt;br /&gt;
:7. Paste the upgrade&lt;br /&gt;
:8. Press Ok.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Importing_Foreign_IR_Remotes_in_RemoteMaster&amp;diff=3405</id>
		<title>Importing Foreign IR Remotes in RemoteMaster</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Importing_Foreign_IR_Remotes_in_RemoteMaster&amp;diff=3405"/>
		<updated>2025-11-23T00:06:20Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Ultra-short version =&lt;br /&gt;
&lt;br /&gt;
* Perform an &amp;quot;Girr&amp;quot; export from IrScrutinizer to a file,&lt;br /&gt;
* Open the above created file in RemoteMaster. Perform desired fixes.&lt;br /&gt;
&lt;br /&gt;
= History =&lt;br /&gt;
&lt;br /&gt;
The previous version of this article described a faily &amp;quot;dumb&amp;quot; method of exporting a Girr file from IrScrutinizer to a stripped-down RemoteMaster rmdu file, using a effectively empty, dummy executor called &amp;quot;ImportOnly&amp;quot;. This is imported in RemoteMaster, after which the user has to chose the executor manually. &lt;br /&gt;
The previous version can be access through the Wiki history function, or directly [https://www.hifi-remote.com/wiki/index.php?title=Importing_Foreign_IR_Remotes_in_RemoteMaster&amp;amp;oldid=880 here].&lt;br /&gt;
&lt;br /&gt;
Since then, amazing work has been done in RemoteMaster on importing foreign IR signals, or more exactly, mapping the foreign protocols on the JP1&#039;s executors. Accordingly, Girr files can be imported directly, which makes the importing procedure almost automatic.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The Internet is a vast source of infrared code sets, see for example [http://harctoolbox.org/IR-resources.html this list].&lt;br /&gt;
For usage with RemoteMaster (&amp;quot;RM&amp;quot;), this information is in general not directly usable. &lt;br /&gt;
Often, usable RM device update files (&amp;quot;rmdu&amp;quot;) can be found in the&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 JP1 device update repository]  (see also&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=8487 the master list] and &lt;br /&gt;
[http://www.getzweb.net/jp1/ the lookup tool]).&lt;br /&gt;
But still some cases remain; in particular self captured (&amp;quot;learned&amp;quot;) remotes. &lt;br /&gt;
&lt;br /&gt;
Of course, one way to solve the problem would be to manually type the signals&lt;br /&gt;
(protocol, parameters, name, possible comment) in the function editor of RM, possibly the help of cut-n-paste.&lt;br /&gt;
This is a very tedious and error prone approach.&lt;br /&gt;
Importing these in a systematic way, with minimal interaction, is the topic of the current article.&lt;br /&gt;
&lt;br /&gt;
= Solution =&lt;br /&gt;
&lt;br /&gt;
The [http://www.harctoolbox.org/Girr.html Girr format for IR signals] is an open and very versatile format for collections of IR signals. These can be parametrized, or in raw format. It is an XML based format. It is the native format of [https://www.hifi-remote.com/wiki/index.php/IrScrutinizer_Guide IrScrutinizer].&lt;br /&gt;
&lt;br /&gt;
First, acquire or generate a suitable Girr file. IrScrutinizer can generate such files, either by (using a suitable hardware receiver) &amp;quot;learning&amp;quot; an available physical remote, or by importing/converting from other format. (See the example below).&lt;br /&gt;
&lt;br /&gt;
This file is then imported into RMDU, by &amp;quot;Open&amp;quot;-ing them. (See pictures in the next section). If the Girr file contains more than one remote, RM inquires the user to select one of them. In rare cases, the user is requested to select between several possible alternative executors.  Although the import almost always succeeds, in rare cases it may fail, so the import should be checked for plausibility. Assign the keys to functions, and make other desired fixes. The thus created device update can now be used as any other update.&lt;br /&gt;
&lt;br /&gt;
Importing remotes is still a quite complicated process. Limitations (for example by &amp;quot;uncommon&amp;quot; protocols, or if signals from several substantially different protocols are present), and in rare cases even bugs, may show up. In this case, please report in the forum.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
We consider the Oppo BDP 103 BluRay player, which has a [http://download.oppodigital.com/BDP103/BDP-103_BDP-105_Remote_Code_v1.1.xls published set of IR commands].&lt;br /&gt;
(The [https://www.hifi-remote.com/wiki/index.php?title=IrScrutinizer_Guide#Importing_.22text.22_files IrScrutinizer Tutorial]&lt;br /&gt;
describes how such files can be imported into IrScrutinizer.) We have downloaded the Excel file and saved it as a csv (comma separated values) file. Here we show the import from that csv file:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot%20from%202022-05-14%2022-16-25.png]]&lt;br /&gt;
&lt;br /&gt;
We now assume that this command set has been imported as parametrized in IrScrutinizer, see the screenshot below.&lt;br /&gt;
Every row of the table denotes a command, has a (unique) name, a protocol, and one or more parameters. A comment may describe the command further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot%20from%202022-05-14%2021-54-01.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Typically, the protocol and all but one parameter, in general called &amp;quot;F&amp;quot;, are constant. &lt;br /&gt;
Here, the protocol is &amp;quot;NEC1&amp;quot;, D = 73, and S is &amp;quot;nonexistent&amp;quot;.&lt;br /&gt;
Having inspected this table, and made&lt;br /&gt;
any desirable changes, the table is exported, by selecting the &amp;quot;Export&amp;quot; pane, selecting &amp;quot;Girr&amp;quot; as the Export format, checking &amp;quot;Parameters&amp;quot; and pressing &amp;quot;Export param. remote&amp;quot;.&lt;br /&gt;
This creates a girr file.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot%20from%202022-05-14%2021-15-25.png]]&lt;br /&gt;
&lt;br /&gt;
After starting RMDU, the just-created simple girr file is imported through File -&amp;gt; Open.&lt;br /&gt;
&lt;br /&gt;
[[Image:rm_opening_file.png]]&lt;br /&gt;
&lt;br /&gt;
Next screenshot shows RMDU after the import:&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot%20from%202022-05-14%2021-32-52.png]]&lt;br /&gt;
&lt;br /&gt;
Now, select the &amp;quot;Functions&amp;quot; pane, and check the sanity of its content, in particular hex- and OBC values.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot%20from%202022-05-14%2021-33-56.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The import has been successful! It now remains to tune the device update (rmdu) to your needs:&lt;br /&gt;
adjusting description, notes, device type as desired, select setup code and the target remote, assigning the functions to its buttons, saving the&lt;br /&gt;
file to a suitable name, etc.&lt;br /&gt;
This is outside of the scope of this article, and described in detail the RM documentation.&lt;br /&gt;
&lt;br /&gt;
= Remarks =&lt;br /&gt;
&lt;br /&gt;
== Import ict files from IrScope ==&lt;br /&gt;
&lt;br /&gt;
RMDU can also import (&amp;quot;open&amp;quot;) ict files from the program [https://www.hifi-remote.com/wiki/index.php/IR_Scope_and_IR_Widget_User%27s_Guide IrScope].&lt;br /&gt;
&lt;br /&gt;
= Support and help =&lt;br /&gt;
&lt;br /&gt;
Please post help requests in the forum.&lt;br /&gt;
&lt;br /&gt;
Suggestions for improvements, both of the procedure here described, and of the present document,&lt;br /&gt;
are solicited.&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Getting_started_with_Xsight_and_Nevo&amp;diff=3404</id>
		<title>Getting started with Xsight and Nevo</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Getting_started_with_Xsight_and_Nevo&amp;diff=3404"/>
		<updated>2025-11-23T00:04:46Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[[Image:Xsight_touch.jpg|right]]&lt;br /&gt;
== Introduction ==&lt;br /&gt;
The Xsight and Nevo model remotes are very advanced IR and RF remotes made by Universal Electronics Inc. (UEI), the maker of One-for-all (OFA) brand and supplier to many OEMs, cable and satellite systems. With original list prices of $150-$250 US, and current prices of around $20 on [https://www.ebay.com/sch/i.html?_from=R40%28xsight%2Cnevo%29+remote+-smart+-battery+-batteries+-rca.TRS0&amp;amp;_nkw=%28xsight%2Cnevo%29+remote+-smart+-battery+-batteries+-rca ebay], they are arguably the best value of any universal remote available today, very similar in form and function to certain Harmony remotes at a fraction of the price. It can control any consumer IR device in existence. Universal Electronics Device Codes Database is the largest and most comprehensive in the world.&lt;br /&gt;
&lt;br /&gt;
:Nevo C2 / Xsight Color - IR only&lt;br /&gt;
:Nevo C3 / Xsight Touch - IR and RF&lt;br /&gt;
&lt;br /&gt;
Advanced features include:&lt;br /&gt;
*LCD display with up to 5 pages of 6 functions per page&lt;br /&gt;
*Fully backlit&lt;br /&gt;
*15-18 devices (18 devices for Touch, C2 and C3) &lt;br /&gt;
*Rechargeable battery (Touch and C3 only)&lt;br /&gt;
*RF with 6 IR blasters (Touch and C3 only)&lt;br /&gt;
*Direct RF control of several home automation devices and HR20 series DirecTV receivers (Touch and C3 only)&lt;br /&gt;
*72 favorites with icons and custom categories (Mom, Dad, Kids, Sports, News, etc.) &lt;br /&gt;
*Activity macros&lt;br /&gt;
*Device specific macros&lt;br /&gt;
*Variable hold durations &lt;br /&gt;
*Pronto hex import &lt;br /&gt;
*Custom devices and protocols &lt;br /&gt;
*Custom icon for any command &lt;br /&gt;
*Offline config with unlimited local file backups and versions &lt;br /&gt;
*IR signal analysis tools via Remote Master&lt;br /&gt;
*Convert learns to new device&lt;br /&gt;
*Programming via Remote Master on Mac/Linux/Windows XP/7/8/10 &lt;br /&gt;
*Access to huge UEI database, Remote Central codes and JP1 database&lt;br /&gt;
&lt;br /&gt;
== Setup and Programming ==&lt;br /&gt;
Xsight and Nevo can be programmed entirely in Remote Master. Device configuration can be done entirely on the remote itself. Activities, Macros and Favorites must be programmed from a PC. If your remote came with a CD, DO NOT install it. The EZ-RC website and software used to program these remotes no longer exists. If you are running Windows 8.1 or greater, also apply the [http://www.oneforall.com/downloads/dl/file/id/344/urc8602_windows_8_1_10_connection_patch.zip Xsight Color patch] ([https://www.hifi-remote.com/files/wiki/urc8602_windows_8_1_10_connection_patch.zip mirror copy]), or the  [http://www.oneforall.com/downloads/dl/file/id/347/urc8603_windows_8_1_10_connection_patch.zip Xsight Touch patch] ([https://www.hifi-remote.com/files/wiki/urc8603_windows_8_1_10_connection_patch.zip mirror copy]).  &lt;br /&gt;
&lt;br /&gt;
Remote Master is an alternative to the now defunct EZ-RC website. To use it, download and install [https://sourceforge.net/projects/controlremote/files/RMIRDevelopment/ Remote Master]. Then connect your remote and download from it.&lt;br /&gt;
&lt;br /&gt;
If you are new to Remote Master, please read the [[JP1 - Just How Easy Is It? - RM-IR Version|Tutorials]] and learn how to use it before you attempt to program your Xsight or Nevo with it. All JP1 remotes share much of the same functionality. But features unique to Xsight/Nevo are found [[JP1 - Just How Easy Is It? - RM-IR Version#Xsight.2FNevo|here]]. &lt;br /&gt;
&lt;br /&gt;
Here is the general work flow:&lt;br /&gt;
&lt;br /&gt;
* The first time you run RMIR, connect your remote and Download from it (and save the .rmir file, in case you want to restore it later)&lt;br /&gt;
* Go to the [https://www.hifi-remote.com/forums/dload.php JP1 file section] and download the device upgrades you&#039;d like to add. (Device model numbers usually don&#039;t need to match exactly since most models of a similar vintage within the same brand share most of the same codes).&lt;br /&gt;
* In RMIR, go to the Devices tab, click New, Open, then browse to the device upgrade file you downloaded from the file section and arrange the functions as desired on the Layout and/or Buttons tabs (click Page+/- to access each page of the LCD screen). Assign icons as desired.&lt;br /&gt;
* Click OK when done&lt;br /&gt;
* Assign device icons, button names and volume lock (volume punch through) on the General tab&lt;br /&gt;
* Create and edit Activities on the Activities tab. Assign icons as desired.&lt;br /&gt;
* Create and edit Macros on the Macros tab&lt;br /&gt;
* Create and edit Favorites on the Favorites tab. Assign icons as desired.&lt;br /&gt;
* Optionally manage and convert learned signals to device upgrades on the Learned Signals tab&lt;br /&gt;
* Upload to the remote&lt;br /&gt;
* Save often (you can save/load as many versions as you wish)&lt;br /&gt;
&lt;br /&gt;
A Macro is simply a series of commands performed with a single button press. An Activity is a special kind of macro that also assigns groups of buttons to different devices, i.e., volume keys to a receiver, playback keys to a disc player, number keys to a cable box, etc. Activities are good for turning several devices on or off and selecting the appropriate inputs as well as assigning each group of keys to the appropriate devices. Macros are good for sending a series of commands to save button presses, i.e., if it takes several steps to toggle captions on your device, put all those steps in a macro and assign to a single button.&lt;br /&gt;
&lt;br /&gt;
The Volume Lock settings on the General tab set the volume control device when a given device is selected. The volume device on the Activities tab takes precedence over this when a given activity is run.&lt;br /&gt;
&lt;br /&gt;
Please post questions, bug reports and feature requests [https://www.hifi-remote.com/forums/viewtopic.php?t=14804&amp;amp;start=0 here]. Development discussion should continue in the existing developer thread. If you are a beginner with RM and have general questions, please post those in a new thread or other existing threads if applicable.&lt;br /&gt;
&lt;br /&gt;
== Favorites and Icons == &lt;br /&gt;
&lt;br /&gt;
The Nevo and Xsight Touch and Color models have a favorites list feature. It consists of one master list, and several other custom lists which are a subset of the master list. Each favorite can have an icon (max 72x34, automatically scaled down if larger) which can be assigned in RMIR by double clicking the Icon checkbox. The best source for channel logo icons is [http://www.iconharmony.com/icons/watchtv?category=NevoXsight iconharmony] and there are more icons [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=164 here].&lt;br /&gt;
&lt;br /&gt;
Every individual function for every device can also have an icon. Devices and Activities can also have icons, but those are limited to a set of built-in icons.&lt;br /&gt;
&lt;br /&gt;
The total number of icons across all favorites, profiles and functions is limited to 80 minus the 8 built in profile icons. If you find that you cannot add an icon, you have reached this limit. In that case, delete any unused or unnecessary icons.&lt;br /&gt;
&lt;br /&gt;
[https://www.hifi-remote.com/forums/viewtopic.php?p=120666#120666 Here] is a dedicated icons thread with more info and links to other icon sources.&lt;br /&gt;
&lt;br /&gt;
== Win 8.1/10 Requirements ==&lt;br /&gt;
&lt;br /&gt;
Certain registry settings are required in order for Xsight to maintain a connection in Win 8.1 and 10 which are detailed [[Enhanced Power Management|here]]. &#039;&#039;(Requires RMIR v2.10 build 5, or later)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Links to the official registry patches from OneForAll are posted below in the [[Getting started with Xsight and Nevo#References|References]] section. Or you can simply follow the instructions in RMIR linked above.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
*If the remote won&#039;t learn, make sure you are aiming at the bottom of the Xsight/Nevo. The learning eye is not at the top of the remote like most other JP1 remotes.&lt;br /&gt;
*If you can&#039;t remove the Assist buttons in your activities, then you need to update the firmware on your remote. If your firmware is not the latest version, Remote Master will prompt you to upgrade it.&lt;br /&gt;
*If your remote won&#039;t download, upload or stay connected in Windows 8/8.1/10, you need to perform the registry patch in the previous section.&lt;br /&gt;
*If your remote is unresponsive, try the reset instructions [https://www.hifi-remote.com/forums/viewtopic.php?p=27215#27215 here].&lt;br /&gt;
*If none of the above work, you can rebuild the memory in the remote and so remove any corruption by performing the following steps: &lt;br /&gt;
# Connect remote with the USB cable. &lt;br /&gt;
# Open RMIR and load the .rmir file of the setup before you had any problems. Do NOT try to upload it to the remote. Just load it into RMIR. &lt;br /&gt;
# Open the &amp;quot;Advanced&amp;quot; menu and select &amp;quot;XSight operations&amp;quot;. This opens a sub-menu. On that, select &amp;quot;Format and rebuild XSight file system...&amp;quot;. &lt;br /&gt;
# You should now have a message with some information that asks if you are sure you want to continue. Click the &amp;quot;Yes&amp;quot; button. &lt;br /&gt;
# The progress bar at the bottom of the screen will now say &amp;quot;REBUILDING FILE SYSTEM&amp;quot;. This will take a few minutes. I have just done this and it took 2 minutes on my PC. After one minute it only reached 15%, but it speeds up after that. When it finishes, it should give a message saying &amp;quot;Reformatting and rebuild complete&amp;quot; and showing an OK button. Press that button. &lt;br /&gt;
# Now press the Upload button on the toolbar (or select &amp;quot;Remote &amp;gt; Upload to remote&amp;quot; from the menu bar if you prefer). You will get the usual message saying that an upload overwrites what is in the remote and asking if you want to continue. Yes, you do. Your setup should now upload to the remote without any problems. When the upload finishes, you can disconnect the remote from the PC&lt;br /&gt;
&lt;br /&gt;
== FAQ == &lt;br /&gt;
&#039;&#039;&#039;What&#039;s the difference between the Xsight Color, Xsight Touch, Nevo C2 and Nevo C3?&#039;&#039;&#039; &lt;br /&gt;
*The 18 device Xsight Touch (URC-8603 or AARX18G) is identical to the Nevo C3, and the 15 device Color (URC-8602 or ARRX15G) is identical to the C2 except that the C2 has 18 devices. The Touch and Color are the same except that all Touch models are 18 device, add RF capability, rechargeable battery, charging base, slimmer/lighter design and touchscreen. The on-screen functions on the Color are accessed via buttons along the sides rather than direct touch. The URC models are OneForAll brand in Europe and the AARX are Acoustic Research brand in the US. C2 and C3 are Nevo brand worldwide. The first Xsight model was introduced around 2009 and discontinued around 2011.&lt;br /&gt;
&lt;br /&gt;
*The RF capable Xsight Touch and Nevo C3 require a base (with 6 included blasters) in order to be used in RF mode (ARRE433B or REX-433). Without the base, the remote can still be used in IR mode or in RF mode for HR2x and H2x series DirecTV devices and certain RF home automation devices.&lt;br /&gt;
&lt;br /&gt;
*There are two other similar, but more limited Xsight models, the 12 device Plus (URC-8620 or AARX12G) and 6 device Lite (URC-8610). These are physically smaller and have only a 3 line LCD where each function is accessed by using an up/down rocker switch to select.&lt;br /&gt;
&lt;br /&gt;
*Finally, there is the entirely unique Monster Revolution 200. It is not to be confused with any other Monster remote and is the only one that used EZ-RC. It is essentially two different controllers in one. It is described as providing Home Theater (AV) and Lighting Control and these are entirely separate functions. The AV support is broadly similar to that of the XSight Lite, supporting 6 devices together with Activities and Favorites. The big difference from the XSight Lite is that it can ONLY be programmed with EZ-RC (and now, of course, RMIR). There is no built-in IR database and no means of programming it from the remote. RMIR (as of v2.05 build 2) provides a complete replacement for EZ-RC support, including firmware upgrade. The Lighting control, on the other hand, can ONLY be programmed from the remote. EZ-RC has nothing to do with this functionality. A detailed manual is provided on disk about this programming. This is Z-Wave control; for those like me who have no idea what this means, the glossary in the manual says &amp;quot;Z-Wave uses reliable, low power radio waves to control all aspects of your home wirelessly: lighting, climate control, safety and security, home entertainment, energy conservation, and remote monitoring&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What are some of the special features of Remote Master?&#039;&#039;&#039; &lt;br /&gt;
*It gives you direct access to every aspect of the remote configuration. &lt;br /&gt;
*Save/load/edit/create any number of devices or remote configurations off-line and edit them whether your remote is connected or not. &lt;br /&gt;
*Load any of the thousands of devices in the JP1 file section. &lt;br /&gt;
*Download new devices from UEI on the Simple Set website and convert to Xsight/Nevo format.&lt;br /&gt;
*Convert learns to new devices which results in perfect signals and uses less memory. &lt;br /&gt;
*You can use tools like IRScrutinizer to analyze pronto hex codes and build your own devices from them in RM. &lt;br /&gt;
*Runs on many platforms (PC/Mac/Linux) and does not require a browser. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How is Xsight different from other JP1 remotes?&#039;&#039;&#039; &lt;br /&gt;
*Xsight has an LCD (controlled via touch or buttons depending on the model) for up to 30 additional functions per device or 72 favorites with custom icons. This is a major advantage as additional functions can be logically organized and clearly labeled. On a traditional JP1 remote, additional functions would have to be memorized or documented on a &amp;quot;cheat sheet&amp;quot; for reference. &lt;br /&gt;
&lt;br /&gt;
*Xsight includes a USB interface cable, so it is not necessary to buy or build a JP1 cable. &lt;br /&gt;
&lt;br /&gt;
*Xsight has no &amp;quot;keymoves&amp;quot; like other JP1 remotes since you can assign any function from any device to any button in the Device editor. This takes the place of keymoves.&lt;br /&gt;
&lt;br /&gt;
*Xsight does not and never will have an extender. This means no extender capabilities like toadtog or calling macros from within macros.&lt;br /&gt;
&lt;br /&gt;
*Xsight has many extender features already built-in: unlimited length macros, device specific macros, pauses, key group mapping and enough devices so that multiplexing isn&#039;t needed. It also has enough LCD buttons that long, short, double, shifted and double shifted buttons aren&#039;t needed either.&lt;br /&gt;
&lt;br /&gt;
*Xsight is activity based. This means the Xsight has a special class of macros that includes key group mapping for mixing the functions of different devices and handling channel lock and volume punch thru. However, Xsight activities differ from Harmony activities in that after the activity macro runs, the remote ends up in a specific device mode with certain key groups mapped to other devices as desired. In this sense, an Xsight activity is simply a macro plus key group mapping, not a mode of operation per se, like a Harmony activity would be.&lt;br /&gt;
&lt;br /&gt;
*Xsight Touch can natively control HR2x, H2x series DirecTV DVRs and receivers as well as many home automation devices directly via RF without needing an RF base or IR blasters, making it a truly universal RF remote&lt;br /&gt;
&lt;br /&gt;
*Xsight has guided, interactive device code setup on the remote. This means if you want to use Xsight without activities, to set up the remote, you simply look up the brands of your devices on the remote itself without having to look up any codes or connect to a computer.&lt;br /&gt;
&lt;br /&gt;
*Xsight favorites feature is greatly enhanced over other JP1 remotes. Rather than just a few favorites executed sequentially by a single button, Xsight has up to 72 directly accessible favorites on the LCD with custom full color icons and optionally grouped into several custom categories. &lt;br /&gt;
&lt;br /&gt;
*Xsight Touch has a rechargeable battery and charging base. &lt;br /&gt;
&lt;br /&gt;
*Xsight has a huge amount of memory. Rather than a few kilobytes, it has a few megabytes for devices, macros, learning and icons. &lt;br /&gt;
&lt;br /&gt;
*These remotes have been discontinued since 2011 and as such, the material used to create the rubberized feel on these remotes is aging.  It may be desirable to remove it using a solvent or similar product.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How does Xsight compare to similar Harmony remotes?&#039;&#039;&#039; &lt;br /&gt;
*The Xsight Touch RF remote is very similar to the Harmony 900 and Xsight Color IR remote is very similar to the Harmony One, 650, 665 and 700 in terms of button layout, ergonomics and features. Both are PC programmable, activity based, backlit, learning, have a step-wise help facility, and have favorites and icons. Like the 900, the Touch is RF and has a rechargeable battery and charging base. Like the 650/665, the Color is IR only and uses standard AA batteries. But you can use rechargeable AAs (Eneloop type batteries are highly recommend). &lt;br /&gt;
&lt;br /&gt;
*The biggest difference is that Xsight does NOT have power and input state tracking like Harmony. This means for TOADs (devices that have only power toggle and input cycling commands), Xsight cannot remember those states. In activity macros, devices could toggle off when it was intended for them to toggle on or go to the wrong input. But, if you are able to use discrete power and input commands, this doesn&#039;t matter. With discretes, the power and input states will always work correctly. This can also be an advantage in systems using HDMI-CEC control which normally interferes with Harmony state tracking.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Key advantages Xsight has over Harmony are:&#039;&#039;&#039; &lt;br /&gt;
**6 functions per page &lt;br /&gt;
**Hard Red/Green/Blue/Yellow buttons (Harmony One lacks these)&lt;br /&gt;
**15 devices (18 devices for Touch, C2 and C3) &lt;br /&gt;
**Native RF universal remote control for home automation and some DirecTV receivers&lt;br /&gt;
**72 favorites with custom categories (Mom, Dad, Kids, Sports, News, etc.) &lt;br /&gt;
**Editable activity macros &lt;br /&gt;
**Unlimited macro length &lt;br /&gt;
**Variable hold durations (great for turning TV vol to zero with one command) &lt;br /&gt;
**Pronto hex import &lt;br /&gt;
**Custom devices and protocols &lt;br /&gt;
**Custom icon for any command &lt;br /&gt;
**Offline config with unlimited local file backups and versions &lt;br /&gt;
**IR signal analysis tools &lt;br /&gt;
**Advanced programming via Remote Master on Mac/Linux/Windows XP/7/8/10 &lt;br /&gt;
**Access to huge UEI device database, Remote Central codes and JP1 database&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Key advantages Harmony has over Xsight are:&#039;&#039;&#039; &lt;br /&gt;
**Power and input state tracking&lt;br /&gt;
**Access to Harmony device database&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What is the latest firmware and how do I get it?&#039;&#039;&#039; &lt;br /&gt;
*The latest firmware version is 1.3.32 for Xsight and 1.3.33 for Nevo (Home -&amp;gt; Settings -&amp;gt; -&amp;gt; About) and is available in Remote Master. If you are not running the latest, Remote Master will prompt you, and you can perform the upgrade from there.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How can I factory reset my remote?&#039;&#039;&#039; &lt;br /&gt;
# Go to &#039;Home&#039; &lt;br /&gt;
# Hit settings&#039; &lt;br /&gt;
# Scroll to the last page &lt;br /&gt;
# Hit &#039;Reset&#039; ONCE &lt;br /&gt;
# Type &#039;981&#039; &lt;br /&gt;
# Screen should change from &#039;Reset&#039; to &#039;Factory Reset&#039; &lt;br /&gt;
# Press Factory Reset&lt;br /&gt;
&lt;br /&gt;
== Buying the Nevo ==&lt;br /&gt;
* &#039;&#039;&#039;Nevo C2 / C3, Xsight Color / Touch:&#039;&#039;&#039; You can buy the Nevo C2 / Xsight Color on ebay (shipped worldwide from China) for under $25, other models for more: ([https://www.ebay.com/sch/i.html?_from=R40&amp;amp;_nkw=%28xsight%2Cnevo%29+remote+-smart+-battery+-batteries+-rca+-sl+-q50&amp;amp;_sacat=0&amp;amp;_odkw=%28xsight%2Cnevo%29+remote+-smart+-battery+-batteries+-rca+-sl&amp;amp;_osacat=0 eBay Search])&lt;br /&gt;
&lt;br /&gt;
[[Image:Xsight_Lite.jpg|right]]&lt;br /&gt;
== Other Xsight Models ==&lt;br /&gt;
There are also a few other Xsight models, the 6-device Xsight Lite / Plus / Uno, aka, URC-8610 / URC-8620 / ARRX06G. Like the other models, they have an LCD screen, but it&#039;s limited to 3 commands at a time, accessed by scrolling and selecting one at a time. They also have a USB port and works with Remote Master and may have a black or silver bezel around the screen.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
*[[Xsight_Disassembly]]&lt;br /&gt;
*[https://www.hifi-remote.com/files/wiki/urc8602_manua_en.pdf Xsight Manual (mirror copy)]&lt;br /&gt;
*[http://www.avsforum.com/forum/93-remote-control-area/1157746-acoustic-research-xsight-remote.html Xsight thread at AVSForum]&lt;br /&gt;
*[http://www.remotecentral.com/reviews/acoustic_research_xsight_touch/index.html Xsight review at RemoteCentral]&lt;br /&gt;
*[http://www.iconharmony.com/icons/home Icons and Logos]&lt;br /&gt;
*[https://sourceforge.net/projects/controlremote/files/RMIRDevelopment/ Remote Master]&lt;br /&gt;
*Win 8/10 Connection Patch from OneForAll (mirror): [https://www.hifi-remote.com/files/wiki/urc8602_windows_8_1_10_connection_patch.zip Xsight Color], [https://www.hifi-remote.com/files/wiki/urc8603_windows_8_1_10_connection_patch.zip Xsight Touch]&lt;br /&gt;
*[https://blogs.msdn.microsoft.com/usbcoreblog/2013/11/08/help-after-installing-windows-8-1-my-usb-device-doesnt-charge-or-it-disconnects-and-reconnects-frequently/ Microsoft Windows 8.1 connection patch]&lt;br /&gt;
Note: All Xsight Color/Touch info also applies to Nevo C2/C3.&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=RIDgen&amp;diff=3403</id>
		<title>RIDgen</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=RIDgen&amp;diff=3403"/>
		<updated>2025-11-22T23:58:19Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ReplayTV Header}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
===[[RIDgen]]===&lt;br /&gt;
[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2253 RIDgen] is a software tool created by Flipflop to convert UEI&#039;s EFC or OBC codes into a format useable by [[ReplayTV]] DVRs.  &amp;lt;noinclude&amp;gt;There is a tutorial called &amp;quot;[[How to use RIDgen]]&amp;quot;, which explains how to extrapolate information from an RMDU file and incorporate it into RIDgen to create a RID file.&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Image:RIDgen.jpg]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:ReplayTV]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{ReplayTV Footer}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=How_to_use_RIDgen&amp;diff=3402</id>
		<title>How to use RIDgen</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=How_to_use_RIDgen&amp;diff=3402"/>
		<updated>2025-11-22T23:57:29Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{ReplayTV Header}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
==[[How to use RIDgen]]==&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{:RIDgen}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
===Prequisites:===&lt;br /&gt;
:*[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=2253 RIDgen] software package &lt;br /&gt;
:*[https://controlremote.sourceforge.net/ RemoteMaster] with associated [https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=5338 RDF] files.&lt;br /&gt;
&lt;br /&gt;
===Instructions:===&lt;br /&gt;
&lt;br /&gt;
:# Find a JP1 upgrade file the [https://www.hifi-remote.com/forums/dload.php?action=category&amp;amp;cat_id=4 Device Upgrade] category of the File Section.&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;(In the examples below, we&#039;re going to use this file, &amp;quot;[https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=4687 DirecTV D1x, H2x, HR2x, R1x and R2x series (addr 1-8)]&amp;quot; in the demonstration)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
:# Load that file into Remote Master (RM).&amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;[[Image:RIDgen.RM-Setup.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
:# Run RIDGen and copy the &amp;quot;Protocol&amp;quot;, &amp;quot;Device Number&amp;quot;, and &amp;quot;Sub-Device&amp;quot; or other sub-parameter from RM into the respective fields.  &amp;lt;br&amp;gt;&amp;lt;noinclude&amp;gt;[[Image:RIDgen.Setup.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
:# Select the &amp;quot;Functions&amp;quot; tab in RM. &amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;[[image:RIDgen.RM-Functions.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
:# Copy the EFC or OBC codes for all digits 0 through 9, as well as Enter and Power functions (if available) from RM to RIDGen.  &amp;lt;noinclude&amp;gt;[[Image:RIDgen.Functions.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
:# Click the &amp;quot;MakeHex&amp;quot; button to verify the Initial bits and Repeated bits get generated and propagate into their respective columns. &amp;lt;br&amp;gt;&lt;br /&gt;
:#* You might get an error stating, &amp;quot;Unknown Protocol&amp;quot;. &amp;lt;noinclude&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Image:RIDgen.Unknown.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt; This is an indication that MakeHex does not have a InfraRed Protocol (IRP) file for the respective protocol included with the RIDgen distribution.  You may need to generate one or find an appropriate IRP file which address the selected protocol.  &amp;lt;noinclude&amp;gt;In this case, we can the [[DecodeIR#DirecTV|DecodeIR]] documentation against the [[DirecTV]] protocol.  It states that DirecTV was once called, &amp;quot;Russound&amp;quot;.  Since there is a Russound.irp file in the RIDgen directory, we can either rename the file or reword the protocol field appropriately.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;[[Image:RIDgen.MakeHex.jpg]]&amp;lt;br&amp;gt;&amp;lt;/noinclude&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:# At this point you can click &amp;quot;Save&amp;quot; in RIDGen, the filename will default to &amp;quot;C1000fi.rid&amp;quot;.  The nomenclature of the filename is &amp;quot;(first letter of Type)(Code#)fi.rid&amp;quot;.  Altering the values for Code and Type in RIDgen will change the output filename respectively when opting to save.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:* You can see an overview of the fields in the [[RM to RIDgen Overview]] document.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{ReplayTV Footer}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
[[Category:ReplayTV]]&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3401</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3401"/>
		<updated>2025-11-22T23:56:27Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC9200, RAV-2000, USR-5). It is supposed to be interesting for those, who want to clean up his IR codes – in order to find out what all the numbers in field “IR code:” mean and for troubleshooting; - those, who want to develop an IR code converter into other driver/configuration formats – Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format. &lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format. &lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums -  for help and support, my wife – for indulgence and star50fiveoh - for sober intolerance to this article’s subject :) &lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-7-converting.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Picture 7: Converting IR code of template based format of fixed size into format 0000 &#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Note: 0CE0 = -0020 (last “0” at String Code ) + -0CA0 (“R”) + -0020 (first “1”)&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
This format is for representing IR signals that can not (yet) be easily encoded as predefined format of fixed size. The structure of this &lt;br /&gt;
code is described on sample - Grundig 7000 0088 0000 0007 0008 000b 0010 0000 0017 0001 0001 0001 &lt;br /&gt;
0001 0001 0001 0001 0005 0044: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code. Every word point a word in String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Unused word for compatibility, it is present if nCodeSeq is odd  || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf( wRest &lt;br /&gt;
) &lt;br /&gt;
Converting procedure is the same as previous one except String Code obtaining, that I describe now: &amp;lt;br&amp;gt;&lt;br /&gt;
Character choosing to String Code depends on value of corresponded wCIdx from aCode: &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;lt; 0010, then corresponded bCh indexes from second firmware table  dID  bCh  [i] , where dID = wSubFmtID and [i] = wCIdx &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx = 0010, then bCh = “|” &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;gt; 0010, then this char is toggle. On odd code (of this subformat) replaying bCh is equal (wCIdx – 14h)-th char of &lt;br /&gt;
corresponded zTemplate: bCh = zTemplate[ wCIdx – 14 ], where first index in zTemplate is 0. On even code replaying – next &lt;br /&gt;
char: bCh = zTemplate[ wCIdx – 13 ]: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-8-forming.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some Pronto models (RAV-2000, USR-5, TSU-2000, TSU-6000, TSU-500, TSU-3000, RU-970, RU930) supports internal IR &lt;br /&gt;
database, others have no internal DB, but only software, and RC-3200 has no any databases:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format is used for recall IR codes from real UDB. UDB has clear structure – all commands in it are indexed first by Device Type &lt;br /&gt;
(see tables); next – by Brand/Code Set and finally – by Function (depending on device type); it is really easy to custom. Accordingly, &lt;br /&gt;
structure of this format is systematic – code contains no IR data, only function – device type, brand and device function!  &lt;br /&gt;
For example – code of “Power On” for Amp Yamaha, code set 1 - 8000 0000 0002 0000 000a 23f0 0002 0000:&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fields wDevType, wBrandCodeSet and wFunction indexes corresponded list values from UDB: &lt;br /&gt;
&lt;br /&gt;
Not all of the UDB codes (format 8000) are supported by all Pronto models, also, not all of the code combinations of this format are supported by any Pronto at all – UDBs differ from model to model! &lt;br /&gt;
&lt;br /&gt;
It is not so hard to extract real IR codes from corresponded DB files, but it is easily to get them directly via TSS. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wDevType !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || A. proc&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cable &lt;br /&gt;
|-&lt;br /&gt;
| 3 || CD&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFunction !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Power off &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Power on&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Channel down&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Infrared_Signals&amp;diff=3400</id>
		<title>Infrared Signals</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Infrared_Signals&amp;diff=3400"/>
		<updated>2025-11-22T23:52:35Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IR signal emitted by the standard household remote is a series of ON and OFF bleeps of the infrared light, the frequency of light used does not vary much, many remotes use a signal of approximately 40KHz. The message is carried in the time the light is on or off. These on and off combinations can be translated into a binary code which in turn can be translated into decimal numbers. These numbers are the device and command codes. First off, the device code in the signal must match the pre-programmed device code in your equipment, and if it does the equipment will follow the instructions that have been pre-programmed for the command number included in the signal.&lt;br /&gt;
&lt;br /&gt;
There are two primary formats of IR signal. The most common format is known as &#039;&#039;&#039;Pulse Width Method&#039;&#039;&#039;, this is a format where either the ON or OFF time is constant, and the message is carried in the variations of the non-constant time. The second format is known as &#039;&#039;&#039;Bi-Phase&#039;&#039;&#039; or RC-5 and is primarily used by Philips. In this format both the on and off times vary, the light is sampled at a fixed rate and it&#039;s the state of the light that decides if a binary ONE or ZERO is present. Usually if the light is ON, it means it&#039;s a ONE and if it&#039;s off it means it&#039;s a ZERO.&lt;br /&gt;
&lt;br /&gt;
This was just a very brief overview. There are two excellent documents about each format, please read them to understand more. Both of these documents refer to the Pronto HEX format, this is the way IR signals are displayed by the Philips Pronto. The Pronto is a universal remote that can be hooked up to a PC and used to load IR signals up to the PC for examination.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;[[Infrared 101]]&#039;&#039;&#039;&lt;br /&gt;
| - by Rob Crowe&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[[Pulse Width Method]]&#039;&#039;&#039;&lt;br /&gt;
| - by Barry Gordon&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[[Bi-Phase Method]]&#039;&#039;&#039;&lt;br /&gt;
| - by Guy Kuo&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[[Infrared Protocol Primer]]&#039;&#039;&#039;&lt;br /&gt;
| - by Vicky Getz&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[[Pronto IR Formats]]&#039;&#039;&#039;&lt;br /&gt;
| - by Evgueni Oulianov&lt;br /&gt;
|- &lt;br /&gt;
| &#039;&#039;&#039;[[Working With Pronto Hex]]&#039;&#039;&#039;&lt;br /&gt;
| - by Vicky Getz&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Talk:Pronto_IR_Formats&amp;diff=3399</id>
		<title>Talk:Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Talk:Pronto_IR_Formats&amp;diff=3399"/>
		<updated>2025-11-22T23:51:25Z</updated>

		<summary type="html">&lt;p&gt;The Robman: Created page with &amp;quot;This wiki article was transcribed from the original article below:&amp;lt;br&amp;gt; https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=6309&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki article was transcribed from the original article below:&amp;lt;br&amp;gt;&lt;br /&gt;
https://www.hifi-remote.com/forums/dload.php?action=file&amp;amp;file_id=6309&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3398</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3398"/>
		<updated>2025-11-22T22:58:03Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Index to UDB (wFmtID = 8000) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-7-converting.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Picture 7: Converting IR code of template based format of fixed size into format 0000 &#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Note: 0CE0 = -0020 (last “0” at String Code ) + -0CA0 (“R”) + -0020 (first “1”)&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
This format is for representing IR signals that can not (yet) be easily encoded as predefined format of fixed size. The structure of this &lt;br /&gt;
code is described on sample - Grundig 7000 0088 0000 0007 0008 000b 0010 0000 0017 0001 0001 0001 &lt;br /&gt;
0001 0001 0001 0001 0005 0044: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code. Every word point a word in String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Unused word for compatibility, it is present if nCodeSeq is odd  || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf( wRest &lt;br /&gt;
) &lt;br /&gt;
Converting procedure is the same as previous one except String Code obtaining, that I describe now: &amp;lt;br&amp;gt;&lt;br /&gt;
Character choosing to String Code depends on value of corresponded wCIdx from aCode: &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;lt; 0010, then corresponded bCh indexes from second firmware table  dID  bCh  [i] , where dID = wSubFmtID and [i] = wCIdx &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx = 0010, then bCh = “|” &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;gt; 0010, then this char is toggle. On odd code (of this subformat) replaying bCh is equal (wCIdx – 14h)-th char of &lt;br /&gt;
corresponded zTemplate: bCh = zTemplate[ wCIdx – 14 ], where first index in zTemplate is 0. On even code replaying – next &lt;br /&gt;
char: bCh = zTemplate[ wCIdx – 13 ]: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-8-forming.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some Pronto models (RAV-2000, USR-5, TSU-2000, TSU-6000, TSU-500, TSU-3000, RU-970, RU930) supports internal IR &lt;br /&gt;
database, others have no internal DB, but only software, and RC-3200 has no any databases:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format is used for recall IR codes from real UDB. UDB has clear structure – all commands in it are indexed first by Device Type &lt;br /&gt;
(see tables); next – by Brand/Code Set and finally – by Function (depending on device type); it is really easy to custom. Accordingly, &lt;br /&gt;
structure of this format is systematic – code contains no IR data, only function – device type, brand and device function!  &lt;br /&gt;
For example – code of “Power On” for Amp Yamaha, code set 1 - 8000 0000 0002 0000 000a 23f0 0002 0000:&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fields wDevType, wBrandCodeSet and wFunction indexes corresponded list values from UDB: &lt;br /&gt;
&lt;br /&gt;
Not all of the UDB codes (format 8000) are supported by all Pronto models, also, not all of the code combinations of this format are supported by any Pronto at all – UDBs differ from model to model! &lt;br /&gt;
&lt;br /&gt;
It is not so hard to extract real IR codes from corresponded DB files, but it is easily to get them directly via TSS. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wDevType !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || A. proc&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cable &lt;br /&gt;
|-&lt;br /&gt;
| 3 || CD&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFunction !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Power off &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Power on&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Channel down&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3397</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3397"/>
		<updated>2025-11-22T22:57:22Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Index to UDB (wFmtID = 8000) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-7-converting.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Picture 7: Converting IR code of template based format of fixed size into format 0000 &#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Note: 0CE0 = -0020 (last “0” at String Code ) + -0CA0 (“R”) + -0020 (first “1”)&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
This format is for representing IR signals that can not (yet) be easily encoded as predefined format of fixed size. The structure of this &lt;br /&gt;
code is described on sample - Grundig 7000 0088 0000 0007 0008 000b 0010 0000 0017 0001 0001 0001 &lt;br /&gt;
0001 0001 0001 0001 0005 0044: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code. Every word point a word in String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Unused word for compatibility, it is present if nCodeSeq is odd  || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf( wRest &lt;br /&gt;
) &lt;br /&gt;
Converting procedure is the same as previous one except String Code obtaining, that I describe now: &amp;lt;br&amp;gt;&lt;br /&gt;
Character choosing to String Code depends on value of corresponded wCIdx from aCode: &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;lt; 0010, then corresponded bCh indexes from second firmware table  dID  bCh  [i] , where dID = wSubFmtID and [i] = wCIdx &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx = 0010, then bCh = “|” &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;gt; 0010, then this char is toggle. On odd code (of this subformat) replaying bCh is equal (wCIdx – 14h)-th char of &lt;br /&gt;
corresponded zTemplate: bCh = zTemplate[ wCIdx – 14 ], where first index in zTemplate is 0. On even code replaying – next &lt;br /&gt;
char: bCh = zTemplate[ wCIdx – 13 ]: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-8-forming.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some Pronto models (RAV-2000, USR-5, TSU-2000, TSU-6000, TSU-500, TSU-3000, RU-970, RU930) supports internal IR &lt;br /&gt;
database, others have no internal DB, but only software, and RC-3200 has no any databases:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format is used for recall IR codes from real UDB. UDB has clear structure – all commands in it are indexed first by Device Type &lt;br /&gt;
(see tables); next – by Brand/Code Set and finally – by Function (depending on device type); it is really easy to custom. Accordingly, &lt;br /&gt;
structure of this format is systematic – code contains no IR data, only function – device type, brand and device function!  &lt;br /&gt;
For example – code of “Power On” for Amp Yamaha, code set 1 - 8000 0000 0002 0000 000a 23f0 0002 0000:&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Fields wDevType, wBrandCodeSet and wFunction indexes corresponded list values from UDB: &lt;br /&gt;
&lt;br /&gt;
Not all of the UDB codes (format 8000) are supported by all Pronto models, also, not all of the code combinations of this format are supported by any Pronto at all – UDBs differ from model to model! &lt;br /&gt;
&lt;br /&gt;
It is not so hard to extract real IR codes from corresponded DB files, but it is easily to get them directly via TSS. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wDevType !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || A. proc&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cable &lt;br /&gt;
|-&lt;br /&gt;
| 3 || CD&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFunction !! description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Power off &lt;br /&gt;
|-&lt;br /&gt;
| 2 || Power on&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Channel down&lt;br /&gt;
|-&lt;br /&gt;
| ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please excuse my poor English. On any questions about Pronto IR – please request me to eoulianov@hotbox.ru , and I will try to answer more clearly :)&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3396</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3396"/>
		<updated>2025-11-22T22:49:38Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Predefined code of variable length (wFmtID = 7000) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-7-converting.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Picture 7: Converting IR code of template based format of fixed size into format 0000 &#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Note: 0CE0 = -0020 (last “0” at String Code ) + -0CA0 (“R”) + -0020 (first “1”)&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
This format is for representing IR signals that can not (yet) be easily encoded as predefined format of fixed size. The structure of this &lt;br /&gt;
code is described on sample - Grundig 7000 0088 0000 0007 0008 000b 0010 0000 0017 0001 0001 0001 &lt;br /&gt;
0001 0001 0001 0001 0005 0044: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code. Every word point a word in String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Unused word for compatibility, it is present if nCodeSeq is odd  || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf( wRest &lt;br /&gt;
) &lt;br /&gt;
Converting procedure is the same as previous one except String Code obtaining, that I describe now: &amp;lt;br&amp;gt;&lt;br /&gt;
Character choosing to String Code depends on value of corresponded wCIdx from aCode: &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;lt; 0010, then corresponded bCh indexes from second firmware table  dID  bCh  [i] , where dID = wSubFmtID and [i] = wCIdx &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx = 0010, then bCh = “|” &amp;lt;br&amp;gt;&lt;br /&gt;
- if wCIdx &amp;gt; 0010, then this char is toggle. On odd code (of this subformat) replaying bCh is equal (wCIdx – 14h)-th char of &lt;br /&gt;
corresponded zTemplate: bCh = zTemplate[ wCIdx – 14 ], where first index in zTemplate is 0. On even code replaying – next &lt;br /&gt;
char: bCh = zTemplate[ wCIdx – 13 ]: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-8-forming.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some models support an internal IR database (UDB). Others rely on software DBs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code example (Power On for Amp Yamaha, code set 1):&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;code&amp;gt;8000 0000 0002 0000 000a 23f0 0002 0000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions and device-type enumerations follow the UDB. Not all combinations are supported across all models.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Pronto-formats-8-forming.jpg&amp;diff=3395</id>
		<title>File:Pronto-formats-8-forming.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Pronto-formats-8-forming.jpg&amp;diff=3395"/>
		<updated>2025-11-22T22:49:12Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3394</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3394"/>
		<updated>2025-11-22T22:41:47Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-7-converting.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Picture 7: Converting IR code of template based format of fixed size into format 0000 &#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Note: 0CE0 = -0020 (last “0” at String Code ) + -0CA0 (“R”) + -0020 (first “1”)&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
Structure (example: Grundig):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code indexes to String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Present if nCodeSeq is odd || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Condition: (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf(wRest)&lt;br /&gt;
&lt;br /&gt;
String Code selection:&lt;br /&gt;
* if wCIdx &amp;lt; 0010: use firmware table (dID, bCh, [i]) where dID = wSubFmtID and [i] = wCIdx&lt;br /&gt;
* if wCIdx = 0010: bCh = “1”&lt;br /&gt;
* if wCIdx &amp;gt; 0010: toggle char; odd replay uses zTemplate[wCIdx - 14], even uses zTemplate[wCIdx - 13]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some models support an internal IR database (UDB). Others rely on software DBs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code example (Power On for Amp Yamaha, code set 1):&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;code&amp;gt;8000 0000 0002 0000 000a 23f0 0002 0000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions and device-type enumerations follow the UDB. Not all combinations are supported across all models.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=File:Pronto-formats-7-converting.jpg&amp;diff=3393</id>
		<title>File:Pronto-formats-7-converting.jpg</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=File:Pronto-formats-7-converting.jpg&amp;diff=3393"/>
		<updated>2025-11-22T22:40:13Z</updated>

		<summary type="html">&lt;p&gt;The Robman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3392</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3392"/>
		<updated>2025-11-22T22:37:41Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f&lt;br /&gt;
&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &lt;br /&gt;
&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff)&lt;br /&gt;
&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000&lt;br /&gt;
&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &lt;br /&gt;
&lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff&lt;br /&gt;
&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff&lt;br /&gt;
&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
Structure (example: Grundig):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code indexes to String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Present if nCodeSeq is odd || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Condition: (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf(wRest)&lt;br /&gt;
&lt;br /&gt;
String Code selection:&lt;br /&gt;
* if wCIdx &amp;lt; 0010: use firmware table (dID, bCh, [i]) where dID = wSubFmtID and [i] = wCIdx&lt;br /&gt;
* if wCIdx = 0010: bCh = “1”&lt;br /&gt;
* if wCIdx &amp;gt; 0010: toggle char; odd replay uses zTemplate[wCIdx - 14], even uses zTemplate[wCIdx - 13]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some models support an internal IR database (UDB). Others rely on software DBs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code example (Power On for Amp Yamaha, code set 1):&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;code&amp;gt;8000 0000 0002 0000 000a 23f0 0002 0000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions and device-type enumerations follow the UDB. Not all combinations are supported across all models.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3391</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3391"/>
		<updated>2025-11-22T21:44:35Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Template Based Formats of Fixed Size (wFmtID = 5000, 5001, 6000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
&lt;br /&gt;
Template based formats of fixed size represent strongly defined IR signals of common brands. As a rule, IR signal, leaned at this format, is the only and “clean” (but I have trouble with RC9200 + Onkyo DVD – it learns its IR codes as 900A mistakenly). IR codes at this format are short, sCode can be 2, 3 or 4 words length, and every of this word means anything like “System”, “Command” or “Data” but that meanings are not essential for converting. &lt;br /&gt;
&lt;br /&gt;
Now, the ranges of that codes:&lt;br /&gt;
&lt;br /&gt;
5000 0000 0000 0001 0000 0000 – 5000 0000 0000 0001 001f 007f &amp;lt;br&amp;gt;&lt;br /&gt;
5001 0000 0000 0002 0000 0000 0000 0000 – 5001 0000 0000 0002 001f 007f 003f 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
Note: it looks like erratum at firmware table, really zMask for dID = 02 must be 5001h + {4-8}{!2,10-15}{16-21}. This bug causes &lt;br /&gt;
a real brain pain: any RC5x code can not be learned by any Pronto! But replaying of these codes works OK, because zMask is not &lt;br /&gt;
used for replay. &amp;lt;br&amp;gt;&lt;br /&gt;
6000 0000 0000 0001 0000 0000 – 6000 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: [2] contains description of RC6 Mode 6A as format 6001 with toggle bit, as all other RC-formats. Currently software &lt;br /&gt;
represents that codes at format 0000 without toggle bit. I have inserted corresponded (obsolete?) entries * and ** to the end of &lt;br /&gt;
firmware tables from [2] for considerations of universality: &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument (Customer Code) is in range of 0000..007f) &amp;lt;br&amp;gt;&lt;br /&gt;
6001 0000 0000 0002 0000 0000 0000 0000 – 6001 0000 0000 0002 007f 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
(&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;subformat of 6001, where first argument is in range of 8000..ffff) &amp;lt;br&amp;gt;&lt;br /&gt;
6001 0000 0000 0002 8000 0000 0000 0000 – 6001 0000 0000 0002 ffff 00ff 00ff 0000 &amp;lt;br&amp;gt;&lt;br /&gt;
9000 0000 0000 0002 0000 0000 0000 0000 – 9000 0000 0000 0002 00ff 00ff 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
900a 0000 0000 0001 0000 0000 – 900a 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
Note: These codes represent most common (may be, after RC) IR signal type (32bits NEC). Usually it consist of 8bit device code, 8bit device code binary compliment, 8bit function code and 8bit function code binary compliment [3,4]. All Pronto models, except RC5200, RC-9200, TSU-6000, RU-970, USR-5 must learn this type of IR signals as 0000 006* 0022 0002 0157 …, and it works fine. New Pronto models can replay formats 900A to 900E, but recognition routine is inclined to learn all NEC IR signals as format 900A, that often results in fsults. &amp;lt;br&amp;gt;  &lt;br /&gt;
900b 0000 0000 0001 0000 0000 – 900b 0000 0000 0001 ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
900c 0000 0000 0002 0000 0000 0000 0000 – 900c 0000 0000 0002 ffff ffff ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
900d 0000 0000 0002 0000 0000 0000 0000 – 900d 0000 0000 0002 ffff ffff ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
900e 0000 0000 0002 0000 0000 0000 0000 – 900e 0000 0000 0002 ffff ffff ffff ffff &amp;lt;br&amp;gt;&lt;br /&gt;
9001 0000 0000 0001 0000 0000 – 9001 0000 0000 0001 00ff 00ff &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: format 9001 is supported only by RAV-2000, but absent in all tables. I can’t check it, and I hope that codes, described at [3,4] are the same, so I have inserted it to firmware tables as ***. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For converting that codes to format 0000 I offer this procedure: &amp;lt;br&amp;gt;&lt;br /&gt;
* Obtaining String Code from zTemplate, zMask and source code &lt;br /&gt;
* Obtaining raw IR data by indexing from String Code &lt;br /&gt;
* Forming IR code at format 0000 from raw IR data&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
Structure (example: Grundig):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code indexes to String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Present if nCodeSeq is odd || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Condition: (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf(wRest)&lt;br /&gt;
&lt;br /&gt;
String Code selection:&lt;br /&gt;
* if wCIdx &amp;lt; 0010: use firmware table (dID, bCh, [i]) where dID = wSubFmtID and [i] = wCIdx&lt;br /&gt;
* if wCIdx = 0010: bCh = “1”&lt;br /&gt;
* if wCIdx &amp;gt; 0010: toggle char; odd replay uses zTemplate[wCIdx - 14], even uses zTemplate[wCIdx - 13]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some models support an internal IR database (UDB). Others rely on software DBs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code example (Power On for Amp Yamaha, code set 1):&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;code&amp;gt;8000 0000 0002 0000 000a 23f0 0002 0000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions and device-type enumerations follow the UDB. Not all combinations are supported across all models.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
	<entry>
		<id>https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3390</id>
		<title>Pronto IR Formats</title>
		<link rel="alternate" type="text/html" href="https://hifi-remote.com/wiki/index.php?title=Pronto_IR_Formats&amp;diff=3390"/>
		<updated>2025-11-22T21:21:56Z</updated>

		<summary type="html">&lt;p&gt;The Robman: /* SYS segment tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Pronto IR Formats =&lt;br /&gt;
&lt;br /&gt;
== Preamble ==&lt;br /&gt;
This article describes in detail the formats of IR code filing for Pronto and ProntoPro models (RU-890, RU-940, RU-970, TS-1000, TSU-2000, TSU-6000, RC-5000, RC-5000i, RC-5200, RC-9200, RAV-2000, USR-5). It is supposed to be interesting for:&lt;br /&gt;
* those, who want to clean up his IR codes — in order to find out what all the numbers in field “IR code:” mean and for troubleshooting;&lt;br /&gt;
* those, who want to develop an IR code converter into other driver/configuration formats — Crestron (.IR), AMX (.IRL), Xantech (.PAL), Niles (.LIN), ADI Ocelot (.LIR), RedRat2 (.TXT), Denon RC-8000 (.RCX), ProntoNeo (.NCF), ProntoNG (.PCF) etc, as a manual of most popular and complicated IMHO IR code format.&lt;br /&gt;
&lt;br /&gt;
It is advisable for you to have a notion of modulated IR signals transmission [1], but I will also coin that terms for completeness. References to some concepts can be earlier than the description of theirs, so as not to touch on same concept doubly. I am not going to mention the details of realization which is not essential for the description of the format.&lt;br /&gt;
&lt;br /&gt;
== Acknowledgments ==&lt;br /&gt;
I would like to thank Daniel Tonks, Stewart Allen, Barry Gordon, Marcel Majoor, Steven Keyser, Bertrand Gillis, Loran Richardson, Bernard Barrier, Barry Shaw, Rob Crowe, Andrea Whitlock, those, who reply at forums — for help and support, my wife — for indulgence and star50fiveoh — for sober intolerance to this article&#039;s subject :)&lt;br /&gt;
&lt;br /&gt;
== Warning ==&lt;br /&gt;
Standard warning about “… your own risk” is in effect.&lt;br /&gt;
&lt;br /&gt;
== Buttons, signals, commands and codes ==&lt;br /&gt;
In order to avoid involving in terms, I specify them precisely:&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-buttons.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 1 — Interaction of buttons, IR signals, commands and IR codes&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The button, IR signal, command and IR code are not corresponding mutually:&lt;br /&gt;
* the same button can produce different IR signals (see Toggle Codes);&lt;br /&gt;
* different IR signals can be recognized by decoder as same command (see Clean and Dirty Codes);&lt;br /&gt;
* the same IR signal can be encoded as a number of IR codes in different formats.&lt;br /&gt;
&lt;br /&gt;
== Modulated IR signal ==&lt;br /&gt;
For some reasons, mainly for simplicity and interference immunity, almost all IR signals, currently used to IR translation, have the same structure. IR transmitter includes a square-wave generator (oscillator), coder and IR LED. All the time of transfer oscillator generates square impulses with fixed (for this remote) carrier frequency; depending on pressed button (and, may be, remote mode), coder forms a code of command — sequence of conventional logical 0s and 1s; IR LED flashes this command modulated by generated impulses.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-2-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 2 — IR LED replays modulated IR signal&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Any modulated IR signal can be fully characterized via carrier frequency and the sequence of period amounts when emitting is on and off. For picture 2 this sequence is 6–2–4–2–4–…&lt;br /&gt;
&lt;br /&gt;
Sometimes remote emits the signal all the time until the button such as VOLUME+ will released. Another way it flashes once per press, or first, once emitted signal is not the same that repeating one, followed it. So, it is convenient to suppose that in the general way IR signal consists of once part, the start emitting sequence and repeat part. For example, endless IR signal 6-2-4-2-4-6-6-3-3-12-6-3-3-12- has the once sequence 6-2-4-2-4-6 and repeat sequence 6-3-3-12: 6-2-4-2-4-6 | 6-3-3-12. All currently used IR signals can be represented either as a union of once and repeat sequences or as the only once or only repeating sequence.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-3-IR.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 3 — Cutting IR signal into once sequence and repeat sequence&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usually, IR codes, describing IR signal this way, are not so long. If learned IR code is not an air conditioner code, it can be completely go in “IR code:” field at ProntoEdit.&lt;br /&gt;
&lt;br /&gt;
In the most of cases carrier frequencies are nearby 35KHz, but you will certainly be lucky enough to try a remote with 175KHz, 345KHz, 455KHz or 1.1MHz.&lt;br /&gt;
&lt;br /&gt;
== “Clean” and “dirty” codes ==&lt;br /&gt;
[1: “Unclean” and “clean” IR commands (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is not necessary to replay IR signal precisely, IR receiver will “identify” received IR signal as correct command, if it looks like real command adequately, say, carrier frequency and burst pairs’s lengths differ from original IR signal less than for 10%. I.e. there is precise, original IR signal for every command, may be not replay-able for Pronto, and also many IR signals that Pronto can replay and IR receiver can recognize as that command. The codes of those signals may have different lengths, and the shortest one is “clean” code, and the all other codes are “dirty” and very “dirty”.&lt;br /&gt;
&lt;br /&gt;
Reasons to prefer “clean” codes:&lt;br /&gt;
* IR signal of “clean” IR code is more recognizable by IR receiver&lt;br /&gt;
* some “dirty” IR codes can lead IR receiver astray or halt it&lt;br /&gt;
* “clean” code is shorter, and replay of it takes less time in macros&lt;br /&gt;
* you can visually check “clean” IR code’s accuracy — the lengths of every “clean” IR codes per remote are the same, except, may be, buttons like VOLUME+&lt;br /&gt;
* “clean” code is more convenient to analyzing, in order to guess a discrete command, absent at this remote&lt;br /&gt;
* using of “clean” IR codes stirs ambitions of punctual Prontoyers&lt;br /&gt;
&lt;br /&gt;
The ordinal way to obtain “clean” IR code is cutting from existing one [1]. Sometimes it is useful to develop special software — generator of all concrete type IR codes — in order to “discover” all possible commands, supported by that device, including those absent at remotes.&lt;br /&gt;
&lt;br /&gt;
Note: There is no difference in IR learning to Pronto standalone or to computer via Pronto, but sometimes this process is faulted due a communication error.&lt;br /&gt;
&lt;br /&gt;
== Toggle IR codes ==&lt;br /&gt;
[1: Why won’t my buttons work twice in a row? (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
It is necessary not to mix up toggle IR codes and toggle IR commands. Toggle Command is a command with toggle function such as standby/on, see TOAD at [1]. In contrast to that, Toggle IR Code contains as minimal 1 toggle bit, see RC5 at [2].&lt;br /&gt;
&lt;br /&gt;
There are many possible troubles and noises at IR transfer — sun, fluorescent lamps, interference with another IR transfer, dust, pets, household and tremor of hesitating hand, holding remote. First two troubles can be cured by signal modulation. Other problems, concerning temporary obstacle, are solved logically. Commonly they use two different IR signals per button — one for odd presses and another for even. As a rule, these codes differ in one or two logical bits (“toggle” bit or “parity”), and both of them encode the same command. When IR decoder receives IR signal such type, it ignores the same signals (or signals with the same “parity” bit) received twice, in order to avoid taking noise as double click.&lt;br /&gt;
&lt;br /&gt;
Pronto IR learning procedure uses the only button pressing, and because of it Pronto can detect as toggle codes only codes of some predefined types, that look like known codes, for example, RC5. When Pronto replays these codes, it emits in turn odd and even IR signals for every type of predefined code format (and if existing, subformat). So repeating the same alias for “long button press” in macro is not effective for toggle codes; it is necessary to convert this code to format 0000 to do it.&lt;br /&gt;
&lt;br /&gt;
If Pronto learns real toggle codes as ordinary, learn all codes in the same parity, and only the “blank” command (that does nothing, if it exists at remote) — in opposite parity, and give any Pronto button two actions — odd real command and even “blank” [1].&lt;br /&gt;
&lt;br /&gt;
== Pronto IR code filling formats ==&lt;br /&gt;
[1: Type of code (Working With Prontoedit: Learning &amp;amp; Infrared)]&lt;br /&gt;
&lt;br /&gt;
IR codes are kept in Pronto and in CCFs in bytes (as all data), but Pronto software uses two-byte hexadecimal words delimited by spaces at IR code view (editBox):  &lt;br /&gt;
&amp;lt;code&amp;gt;0000 0070 0003 0002 0006 0002 0004 0002 0004 0006 0006 0003 0003 000C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I will write all sizes and offsets in 16-bit words and all numbers in hex, if not specified otherwise. First word — &#039;&#039;&#039;wFmtID&#039;&#039;&#039; — identifies IR format.&lt;br /&gt;
&lt;br /&gt;
Supported formats:&lt;br /&gt;
* 0000 — raw oscillated code&lt;br /&gt;
* 0100 — raw unmodulated code&lt;br /&gt;
* 5000 — RC5&lt;br /&gt;
* 5001 — RC5x&lt;br /&gt;
* 6000 — RC6 Mode 0&lt;br /&gt;
* 7000 — predefined code of variable length&lt;br /&gt;
* 8000 — index to UDB&lt;br /&gt;
* 9000, 900A, 900B, 900C, 900D, 900E — NEC&lt;br /&gt;
* 9001 — basic mode YAMAHA NEC code&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-4-hierarchy.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 4 — hierarchy of Pronto IR formats&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Raw formats (wFmtID = 0000 or 0100) =&lt;br /&gt;
They are simple, basic, most commonly used formats. Almost all IR signals can be represented (exactly or cognitive) either in 0000 or 0100 format. There is no way to encode toggle IR codes at these formats, but separately, odd and even IR code can be converted from toggle form to 0000 format. &lt;br /&gt;
&lt;br /&gt;
== Raw oscillated code (wFmtID = 0000) ==&lt;br /&gt;
This is the format that is often implied, when they say “Pronto IR format”. It contains lengths while LED flashes and while &lt;br /&gt;
LED is off in carrier periods (“burst pairs”) in two optional parts - once and repeat sequences. &lt;br /&gt;
&lt;br /&gt;
For example, code from pic.2 and 3 will encoded in this format as 0000 0070 0003 0002 0006 0002 0004 0002 0004 &lt;br /&gt;
0006 0006 0003 0003 000С, where: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0000 || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, positive || Carrier frequency divider || 0070&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, length || Number of burst pairs at once sequence || 0003&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, length || Number of burst pairs at repeat sequence || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 2*nOnceSeq || aOnceSeq || array of rBurstPair || Once sequence || 0006 0002 0004 0002 0004 0006&lt;br /&gt;
|-&lt;br /&gt;
| 4+2*nOnceSeq || 2*nRepeatSeq || aRepeatSeq || array of rBurstPair || Repeat sequence || 0006 0003 0003 000C&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
and rBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDflash || word, positive || Periods when LED flashes with carrier || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Details:&lt;br /&gt;
* wFmtID: word = 0000, Format ID &lt;br /&gt;
* wFrqDiv: word in range 0001..FFFF, wFrqDiv = 4,145146 MHz / &amp;lt;signal carrier&amp;gt;. So wFrqDiv = 0001 corresponds to signal carrier » 4,1 MHz, and wFrqDiv =FFFF ~ 63Hz. I have measured this constant indirectly and have obtained 4,1455±0,0006 MHz, which is close enough with magical number 4,145146 [2], and far enough from 4,194304 [5], but I can’t locate quartz oscillator with this nominal at catalogues. &lt;br /&gt;
* nOnceSeq: word in range 0000..0100, is equal to amount of burst pairs at once sequence &lt;br /&gt;
* nRepeatSeq: word in range 0000..0100, is equal to amount of burst pairs at repeat sequence &lt;br /&gt;
* wLEDflash: word in range 0001..FFFF, is amount of carrier frequency periods when LED flashes every first half-period and turned off for the last half-period &lt;br /&gt;
* wLEDoff: word in range 0001..FFFF, is amount of carrier frequency periods when the LED is off &lt;br /&gt;
 &lt;br /&gt;
Next picture will dispel all residuary questions: &lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-5-correspondence.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 5 — correspondence between IR-signal and IR-code at format 0000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Raw unmodulated code (wFmtID = 0100) ==&lt;br /&gt;
Same structure as 0000, but LED is continuously on for the first word of the burst pair (no carrier):&lt;br /&gt;
&lt;br /&gt;
[[Image:Pronto-formats-6-difference.jpg]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 6 — difference between IR signals for 0000 vs 0100&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Differences:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID. Must be 0100 || 0100&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
aBurstPair consists of: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wLEDon || word, positive || Periods when LED is on || 0006&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wLEDoff || word, positive || Periods when LED is off || 0002&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This format completes format 0000 to universal description of all raw IR signals, but codes at format 0100 are rare – it is &lt;br /&gt;
exposed to sun light and other IR noises. I have learned only 2 devices with these codes – noname drape drive and Dish Satellite &lt;br /&gt;
Positioner. Nevertheless, sometimes it is useful to use IR signal without carrier, for example, for Sony Contol-S: you can replace an &lt;br /&gt;
IR probe at RX-77 to ordinal jack, change 0000 to 0100 at IR codes, and your Sony device will be controlled by Control-S. Some &lt;br /&gt;
other systems also support IR signals without carrier, like Crestron’s CstmFreq value = 43.&lt;br /&gt;
&lt;br /&gt;
= Predefined formats (wFmtID = 5000, 5001, 6000, 7000, 8000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
There are a number of additional, predefined IR formats, supported by some reasons. They can’t describe all IR signals, every type/subtype of this format represents only IR codes with specific structure, for custom “brand”. Also, we need additional data tables to replay these signals. These predefined formats are more compact than corresponding raw IR codes and, as a rule, simple and “clean”. I.e., if you learn IR as 5000 or 7000 and it is not a bug, then that and all other IR signals from this remote must be codes of this type.  &lt;br /&gt;
&lt;br /&gt;
Predefined formats have different structure, but for the reason of compatibility with format 0000, fields wFrqDiv, nOnceSeq, nRepeatSeq leave as dummy, so that code “looks” the same. aOnceSeq and aRepeatSeq  are replaced with sCode, that consist real code info. Also, nOnceSeq and nRepeatSeq must meet the condition (nOnceSeq + nRepeatSeq) * 2 = sizeOf(sCode):&lt;br /&gt;
&lt;br /&gt;
Template header:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID || 5000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word for compatibility || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy code length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy code length || 0001&lt;br /&gt;
|-&lt;br /&gt;
| 4 || (nOnceSeq+nRepeatSeq)*2 || sCode || structure || Predefined code || 0000 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Not all of the predefined formats are supported by any Pronto model – here a table of compatibility is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! wFmtID !! RU-890/940/TS-1000/RC-5000/5000i !! TSU-2000 !! RC-5200/9200 !! TSU-6000/RU-970/USR-5 !! RAV-2000&lt;br /&gt;
|-&lt;br /&gt;
| 0000, 0100, 5000, 5001, 6000, 7000 || ✔ || ✔ || ✔ || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 8000 ||  || ✔ ||  || ✔ || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9000 ||  ||  || ✔  || ✔  || ✔ &lt;br /&gt;
|-&lt;br /&gt;
| 9001 ||  ||  ||  ||  || ✔&lt;br /&gt;
|-&lt;br /&gt;
| 900A–900E ||  ||  || ✔  || ✔  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also, RC-3200 does not support all of this formats directly (except 0000), but RC-3200 Setup converts codes 0100, 5000, 5001 and 6000 codes into format 0000 automatically,  and this feature can be used from elsewhere!  &lt;br /&gt;
&lt;br /&gt;
Note: 0000 format used by RC-3200 is extended by including support of unmodulated IR signals with special value of wFrqDiv = 0001. &lt;br /&gt;
&lt;br /&gt;
When I describe these formats, I will translate them to format 0000, in anticipation of this converter is already exist.&lt;br /&gt;
&lt;br /&gt;
= Template based formats (wFmtID = 5000, 5001, 6000, 7000, 9000, 9001, 900A, 900B, 900C, 900D, 900E) =&lt;br /&gt;
Template based formats are used for memory saving, for representing toggle IR codes, and for encoding IR signals with high &lt;br /&gt;
carrier frequency.  &lt;br /&gt;
&lt;br /&gt;
Segment SYS at Pronto Firmware contains 2 tables for encoding/decoding IR codes these types: &lt;br /&gt;
&lt;br /&gt;
== SYS segment tables ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! zSystem !! zTemplate !! zMask !! dFrqDiv !! bU1 !! dU2 !! dU3 !! dU4&lt;br /&gt;
|-&lt;br /&gt;
| 00 || rc5 || 1[01]{01}[01]%11R || 5000h + {4-8}{12,9-14} || 73 || 0 || 2 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 01 || rc6m0 || H1000ftT}[01]%16R || 6000h + {7-14}{15-22} || 73 || 0 || 0 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 02 || rc5e || 1 01]{01} [01]%5S[01]%12R || 5001h + {4-8}{12,10-15}{15-20} || 73 || 0 || 3 || 0 || 0A&lt;br /&gt;
|-&lt;br /&gt;
| 03 || b&amp;amp;o || 115[1234]*R?|&amp;lt;3[12345]* || 7000h || -09 || 0 || 5 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 04 || kenwood || s$[01]%32e|rp || 7000h || -09 || 0 || 2 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 05 || pioneer || o$[01]%32[RSTUo] r[01rRSTUo]* || 7000h || -04 || 0 || 4 || 1 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 06 || ehrep || s[abcderst]%4[abcderst]* |s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 07 || ehonce || s[abcderst]%4[abcderst]* || 7000h || -0C || 0 || 4 || 0 || 14&lt;br /&gt;
|-&lt;br /&gt;
| 08 || grundig 16ac || P{ac} [abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 09 || grundig 16bd || P{bd}[abcd]%7r || 7000h || 88 || 0 || 0 || 0 || 06&lt;br /&gt;
|-&lt;br /&gt;
| 0A || thomson1 || 2{12}[12]%9R || 7000h || 7C || 0 || 1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0B || thomson2 || {12}{12}[12]%9[RS] || 7000h || 7C || 0 || -1 || 0 || 0F&lt;br /&gt;
|-&lt;br /&gt;
| 0C || thomson3 || [12]%4{12}[12]%7[RST] || 7000h || 7C || 0 || -1 || 0 || 10&lt;br /&gt;
|-&lt;br /&gt;
| 0D || ferguson || s%2(01}[01]%9[RS] || 7000h || -0C || 1 || 4 || 0 || 0D&lt;br /&gt;
|-&lt;br /&gt;
| 0E || telefunken || (01} {01}[01]%9[RS || 7000h || -18 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 0F || echostar || T01]%5R || 7000h || 42 || 0 || -1 || 0 || 07&lt;br /&gt;
|-&lt;br /&gt;
| 10 || saba || (01}{01}[01]%9[RS || 7000h || -08 || 1 || -1 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 11 || crown || 2{12}[12]%9[RS] || 7000h || 6D || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 12 || seleco || 2(12}[12]%9[RS || 7000h || 63 || 0 || 2 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 13 || nec1a || I[01]%32F|R || 900Ah + {8-1,16-9)}{24-17,32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 14 || nec1b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 15 || nec1c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 16 || nec1d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 17 || nec1e || I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 18 || nec2a || I[01]%32FJR || 900Ah + {8-1,16-9}{24-17,32-25} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 19 || nec2b || I[01]%32F || 900Bh + {9-2,17-10}{25-18,33-26} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1A || nec2c || I[01]%32FI[01]%32F|R || 900Ch + {8-1,16-9}{24-17,32-25} {42-35,50-43}{58-51,66-59} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1B || nec2d || I[01]%32F|I[01]%32F || 900Dh + {8-1,16-9}{24-17,32-25} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1C || nec2e || |I[01]%32FI[01]%32F || 900Eh + {9-2,17-10}{25-18,33-26} {43-36,51-44}{59-52,67-60} || 68 || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| 1D || nec || I[01]%32%F|R || 9000h + {8-1}{16-9}{24-17}{32-25} || 6D || 0 || 0 || 0 || 0E&lt;br /&gt;
|-&lt;br /&gt;
| * || rc6m6a-24 || H1110{tT}0[01]%23R || 6001h + {8-14)}{15-22}{23-30} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| ** || rc6m6a-32 || H1110{tT} 1[01]%31R || 6001h + {8-22}{23-30}{31-38} || 73 || 0 || ? || 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| *** || yamahanec || ?I[01]%32F|R || ?9001h + {8-1}{24-17}, + {!16-19}{132 -! 25} || ?6D || 0 || 0 || 0 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq !! dID !! bCh !! [i] !! aBurstSeq&lt;br /&gt;
|-&lt;br /&gt;
| 00 || R || 0 || -0CA0 || 02 || R || 0 || -0AA0 || 03 || 1 || 5 || 005B -0546&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 0 || 1 || 0020 -0020 || 02 || S || 1 || -0080 || 04 || p || 0 || 0103 -AD01&lt;br /&gt;
|-&lt;br /&gt;
| 00 || 1 || 2 || -0020 0020 || 02 || 0 || 2 || 0020 -0020 || 04 || e || 1 || 0103 -47D5&lt;br /&gt;
|-&lt;br /&gt;
| 01 || H || 0 || 0060 -0020 || 02 || 1 || 3 || -0020 0020 || 04 || s || 2 || 0103 -1745&lt;br /&gt;
|-&lt;br /&gt;
| 01 || T || 1 || 0020 -0020 || 03 || R || 0 || 005B -C422 || 04 || r || 3 || 1010 -040C&lt;br /&gt;
|-&lt;br /&gt;
| 01 || t || 2 || -0020 0020 || 03 || 5 || 1 || 005B -1BC0 || 04 || 0 || 4 || 0103 -0309&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0 || 3 || -0010 0010 || 03 || 4 || 2 || 005B -1622 || 04 || 1 || 5 || 0103 -0103&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 1 || 4 || 0010 -0010 || 03 || 3 || 3 || 005B -1083 || 04 || s$ || 6 || 1010 -081E&lt;br /&gt;
|-&lt;br /&gt;
| 01 || R || 5 || -0BC0 || 03 || 2 || 4 || 005B -0AE4 || 05 || r || 0 || 227B -1160&lt;br /&gt;
|-&lt;br /&gt;
| 05 || R || 1 || 022C -8FFA || 0A || R || 0 || 0006 -0857 || 10 || S || 1 || 0009 -58D2&lt;br /&gt;
|-&lt;br /&gt;
| 05 || S || 2 || 022C -6108 || 0A || 2 || 1 || 0006 -011A || 10 || 0 || 2 || 0009 -0F3E&lt;br /&gt;
|-&lt;br /&gt;
| 05 || T || 3 || 022C -4165 || 0A || 1 || 2 || 0006 -00BB || 10 || 1 || 3 || 0009 -0A2A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o || 4 || 022C -31AF || 0B || R || 0 || 0010 -0857 || 11,12 || R || 0 || 0006 -0841&lt;br /&gt;
|-&lt;br /&gt;
| 05 || U || 5 || 022C -2C13 || 0B || S || 1 || 0010 -0642 || 11,12 || S || 1 || 0006 -065B&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0 || 6 || 022C -0684 || 0B || 2 || 2 || 0010 -0112 || 11,12 || 2 || 2 || 0006 -011A&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 1 || 7 || 022C -022C || 0B || 1 || 3 || 0010 -00B1 || 11,12 || 1 || 3 || 0006 -00BB&lt;br /&gt;
|-&lt;br /&gt;
| 05 || o$ || 8 || 227B -1160 || 0C || R || 0 || 0010 -059D || 13–1D, *** || I || 0 || 0157 -00AB&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || r || 0 || 00FC -347B || 0C || S || 1 || 0010 -0417 || 13–1D, *** || F || 1 || 0016 -05E7&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || a || 1 || 00FC -00FC || 0C || T || 2 || 0010 -02FB || 13–1D, *** || 1 || 2 || 0016 -0040&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || e || 2 || 00FC -007E || 0C || 2 || 3 || 0010 -0099 || 13–1D || 0 || 3 || 0016 -0015&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || t || 3 || 007E -347B || 0C || 1 || 4 || 0010 -0044 || 13,15,18,1A || R || 4 || 0157 -0055 0016 -0E3B&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || s || 4 || 007E -0274 || 0D || R || 0 || 0008 -4B7B || * ** || H || 0 || 0070 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || b || 5 || 007E -017A || 0D || S || 1 || 0008 -3A74 || * ** || T? || 1 || 0020 -0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || c || 6 || 007E -00FC || 0D || 0 || 2 || 0008 -0A2B || * ** || t || 2 || -0020 0020&lt;br /&gt;
|-&lt;br /&gt;
| 06,07 || d || 7 || 007E -007E || 0D || 1 || 3 || 0008 -06C3 || * ** || 0 || 3 || -0010 0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || P || 0 || 0019 -005A 0028 || 0D || s || 4 || 0008 -0515 || * ** || 1 || 4 || 0010 -0010&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || a || 1 || -0044 0024 || 0E || R || 0 || 0008 -2BAE || * || R || 5 || -0AB0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || b || 2 || -0036 0012 -000E 0012 || 0E || S || 1 || 0008 -2104 || ** || R || 5 || -09B0&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || c || 3 || -0022 0012 -0022 0012 || 0E || 0 || 2 || 0008 -05CA || 10 || R || 0 || 0009 -74F3&lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || d || 4 || -000E 0012 -0036 0012 || 0E || 1 || 3 || 0008 -03D9 ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 08,09 || r || 5 || -07FC || 0F || R || 0 || 0019 -024C ||  ||  ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0F || 0 || 1 || 0019 -010A || 0F || 1 || 2 || 0019 -00AF ||  ||  ||  || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
At the first table:  &amp;lt;br&amp;gt;&lt;br /&gt;
dID – subformat, used at format 7000 and for connection with second table &lt;br /&gt;
zSystem – unused string, “brand”-like description of dID &lt;br /&gt;
zTemplate – template of logical structure of IR signal of this type (dID) &lt;br /&gt;
:&amp;lt;letters&amp;gt; and &amp;lt;numbers&amp;gt; - are references as bCh to second table, where they (with dID) point out to a concrete aBurstSeq &lt;br /&gt;
:| – delimits once sequence and repeat sequence parts &lt;br /&gt;
:[&amp;lt;chars&amp;gt;] – means any of suggested characters &lt;br /&gt;
:{&amp;lt;char1&amp;gt;&amp;lt;char2&amp;gt;} – corresponds to toggle bit: at odd replaying of IR code of this type must be &amp;lt;char1&amp;gt;, at even – &amp;lt;char2&amp;gt; &lt;br /&gt;
:%&amp;lt;number&amp;gt; - means &amp;lt;number&amp;gt; of duplicates of previous character/term &lt;br /&gt;
:* - any number of any previously defined characters at [&amp;lt;chars&amp;gt;] &lt;br /&gt;
:&amp;lt;char&amp;gt;$ - strange 2-byte name for char, nothing else :) &lt;br /&gt;
:?, &amp;lt; - garbage that must be ignored :) &lt;br /&gt;
zMask – mask, correspondence between zTemplate and IR code at Fixed Size Template Based Formats. Be described at these formats. zMask is used while learning only. &lt;br /&gt;
:Hexadecimal word is wFmtID &lt;br /&gt;
:{&amp;lt;expression&amp;gt;} – means description of corresponded word from sCode &lt;br /&gt;
:&amp;lt;number&amp;gt; - means index at forming String Code for corresponded bit at sCode word &lt;br /&gt;
:&amp;lt;number1&amp;gt;-&amp;lt;number2&amp;gt; - means a range (inversed range) of these bounds – &amp;lt;number1&amp;gt;, &amp;lt;number1+(-)1&amp;gt;, …, &lt;br /&gt;
::&amp;lt;number2&amp;gt; &lt;br /&gt;
:!&amp;lt;number&amp;gt; – means index at String Code for logical negation of corresponded bit at sCode &lt;br /&gt;
dFrqDiv – carrier frequency divider. “-“ means high (&amp;gt;58KHz?) frequency, that is need to be analyzed (when learning) with another filter, I think, so “-“ must be ignored. &lt;br /&gt;
bU1, dU2, dU3, dU4 – additional class/format characteristics. I suppose, they are used by recognition routine, or as additional info, like index of developer, who encodes special code for this format/subformat :), and must be ignored at replaying/converting. &lt;br /&gt;
 &lt;br /&gt;
At the second table: &amp;lt;br&amp;gt;&lt;br /&gt;
dID – same as at the first table &lt;br /&gt;
bCh – means index (char) from zTemplate or String Code &lt;br /&gt;
[i] – means index to aBurstSeq from aCode (same as wCIdx) at Predefined Codes of Variable Length (7000) &lt;br /&gt;
aBurstSeq – analogue of burst pair with variable length – from 1 to 4 words. Positive words mean time when LED flashes, negative – when LED is off.&lt;br /&gt;
&lt;br /&gt;
= Predefined code of variable length (wFmtID = 7000) =&lt;br /&gt;
Structure (example: Grundig):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Format ID = 7000 || 7000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused word || 0088&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0007&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wSubFmtID || word, ID || SubFormat ID (dID) || 0008&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || nCodeSeq || word, length || Length of aCode || 000B&lt;br /&gt;
|-&lt;br /&gt;
| 6 || nCodeSeq || aCode || array of wCIdx || Code indexes to String Code || 0010 0000 0017 0001 0001 0001 0001 0001 0001 0001 0005&lt;br /&gt;
|-&lt;br /&gt;
| 6+nCodeSeq || 0 or 1 || wRest || word, dummy || Present if nCodeSeq is odd || 0044&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Condition: (nOnceSeq + nRepeatSeq) * 2 = 2 + nCodeSeq + sizeOf(wRest)&lt;br /&gt;
&lt;br /&gt;
String Code selection:&lt;br /&gt;
* if wCIdx &amp;lt; 0010: use firmware table (dID, bCh, [i]) where dID = wSubFmtID and [i] = wCIdx&lt;br /&gt;
* if wCIdx = 0010: bCh = “1”&lt;br /&gt;
* if wCIdx &amp;gt; 0010: toggle char; odd replay uses zTemplate[wCIdx - 14], even uses zTemplate[wCIdx - 13]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Figure placeholder: Picture 8 — Forming String Code from 7000&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Index to UDB (wFmtID = 8000) =&lt;br /&gt;
Some models support an internal IR database (UDB). Others rely on software DBs.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Database availability&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! model !! DB type !! file !! size&lt;br /&gt;
|-&lt;br /&gt;
| TS-1000, RU-890, RU-940 || IR database at ProntoEdit || rcir.mdb (Jet) || 360,448&lt;br /&gt;
|-&lt;br /&gt;
| TSU-2000, TSU-6000 || UDB || UDP_int.hex || 362,711&lt;br /&gt;
|-&lt;br /&gt;
| RU-970 || UDB || UDP_int.hex || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| TSU-500 || UDB as part of || TSU500.dat (Jet) || 5,851,136&lt;br /&gt;
|-&lt;br /&gt;
| RU-930 || UDB as part of || RU930.dat (Jet) || 7,299,072&lt;br /&gt;
|-&lt;br /&gt;
| TSU-3000 || UDB || UDB_TSU3000.bin || 422,622&lt;br /&gt;
|-&lt;br /&gt;
| RC-5000/5000i/5200/9200 || IR database at TSS || rcir.mdb (Jet) || 978,944&lt;br /&gt;
|-&lt;br /&gt;
| RC-3200 || — || — || —&lt;br /&gt;
|-&lt;br /&gt;
| RAV-2000 || UDB || ww_udp.idb || 662,090&lt;br /&gt;
|-&lt;br /&gt;
| USR-5 || UDB || ww_udp.idb || 661,011&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code example (Power On for Amp Yamaha, code set 1):&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;code&amp;gt;8000 0000 0002 0000 000a 23f0 0002 0000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! offset !! size !! name !! type !! description !! sample&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || wFmtID || word, ID || Must be 8000 || 8000&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || wFrqDiv || word, dummy || Unused || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || nOnceSeq || word, dummy || Dummy length || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 1 || nRepeatSeq || word, dummy || Dummy length || 0000&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || wDevType || word, index || Device type (000A = Amp) || 000A&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 1 || wBrandCodeSet || word, index || Brand/Code Set (23F0 = Yamaha-1) || 23F0&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 1 || wFunction || word, index || Function (0002 = Power On) || 0002&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 1 || wRest || word, dummy || Padding to even words || 0000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Functions and device-type enumerations follow the UDB. Not all combinations are supported across all models.&lt;br /&gt;
&lt;br /&gt;
= References =&lt;br /&gt;
There are a number of articles about IR formats applied to Pronto on the internet:&lt;br /&gt;
# Daniel Tonks “Unofficial Philips Pronto &amp;amp; Marantz RC5000 FAQ”, http://www.remotecentral.com&lt;br /&gt;
# Marcel Majoor “Communicating with the Pronto”, http://home.hccnet.nl/m.majoor&lt;br /&gt;
# Barry Gordon “ProntoEdit’s IR Display Format”, http://the-gordons.net:8080/, http://www.remotecentral.com/features/irdisp1.htm&lt;br /&gt;
# Barry Shaw, Rob Crowe, Andrea Whitlock “Yamaha extended IR codes”, http://darius.mobius-soft.com/~andrea/&lt;br /&gt;
# Stewart Allen, “The CCF file format”, http://giantlaser.com/tonto/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;Author note:&#039;&#039; Please excuse my poor English. For questions about Pronto IR you can reach me at eoulianov@hotbox.ru, and I will try to answer more clearly :)&lt;/div&gt;</summary>
		<author><name>The Robman</name></author>
	</entry>
</feed>