Extenders (an FAQ)
Written by Capn Trips
What is an extender?
An extender is software loaded into a JP1 remote's EEPROM (or JP1.x remote's FLASH memory) that changes various details of the remote's behavior. Most of what is written here applies to all extenders. However, extenders for JP1.2 and 1.3 remotes are still being developed, and these newer remotes have far greater capabilities (or perhaps our extender-writers do!) than "traditional" JP1 (EEPROM) extenders. They behave similarly in most respects, but there may be deviations from what is described below.
Usually (and originally, PRIMARILY) extenders increase the flexibility and capacity for KeyMoves and Macros.
The basic advantages of most extenders are: (a) Learning memory is (for the most part) converted to Keymove/Macro memory - allowing a VASTLY-increased number of Keymoves and Macros than in an unextended remote; (b) MUCH faster execution of macros; (c) Much greater control and flexibility in button/function assignments. This goes from being able to assign keymoves to buttons you normally could not, to virtually unlimited macro length (through nesting)
Most extenders also provide greater (or more simple) support for Special Protocol functionality, like ToadTog, Long or Double Keypresses, Device-Specific Macros, customization of the LCD display and others (details vary and should be gleaned from the applicable extender readme).
Where are these extenders?
Those extenders that are relatively "mature" are collected in the file section of the JP1 Forum. Occasionally, newer or experimental extenders might be located in the diagnostic section, and you would have to locate them via a link in an applicable discussion thread.
If the extender you seek is NOT on this site, some truly obscure extenders that are very infrequently used might be still located in the old Yahoo Groups File section.
How do I choose the right extender?
There is no universally correct answer to this. As a general rule, most remotes have only one extender available, and if you see more than one, you're usually best off choosing the most recent extender for a particular remote, as it is most likely to have previous versions' bugs fixed.
That said, however, there may be times when the mix of features you want is better in an older version.
You must read the associated readme's for each extender you are considering (almost every extender has a zip file that includes a readme) and determine whether:
(a) It applies to your remote (check remote model #s [see the URC-9960B00 vs. the URC-9960B01], EEPROM sizes [note that the 8811 has 1K, 2K, 8k, and "BIG" versions], etc.); and
(b) Has the features you seek.
The extender disables learning on my remote. How do I cope with this loss of capability?
The loss of learning capability is one of the downsides of using an extender. However, this is not really a loss of learning capability. It is merely the loss of the ability to USE learned signals DIRECTLY from your remote.
Learning is primarily required only to learn and decode a new OEM remote control. You then use these data to build a device upgrade, or assign extra functions as keymoves, so that you never have to actually use the learned signal directly.
If you add a new device to your system, you simply de-activate the extender, learn and decode what you need (experts are standing by on this forum to help with bizarre decodes for your remote pet-feeding system or beer-delivery conveyor belt), build your new upgrade and add it to your remote, and reactivate the extender for routine operation of the remote.
The huge increase in Keymove and Macro memory that you gain far offsets the inability to use learned signals in almost all cases.
How do I "INSTALL" an extender? (or Building an extender IR (or RMIR) file.)
(For brevity, whenever reference is made to "IR" it applies to both IR and RMIR unless otherwise specified)
Well, there are two distinct scenarios here.
First, modifying an existing unextended IR setup into an extended one, and second, building an extender IR file from scratch.
For either, there is some preparatory work to be done:
(i) Unzip the extender zip file in a location of your choosing (but know where to find it)
(ii) Although the extender zip file has RDFs, these are likely old, and you should use the MOST CURRENT RDFs from the RDF distribution zip file (which may be updated to accommodate improvements in the software tools). Occasionally, there will be a better .rdf linked in a thread, but that's the exception rather than the rule.
(a) Building an extender IR file from scratch.
This will vary depending on the extender .zip file, but MOST more recent such packages include a bare-bones IR file (It may have a .txt extension instead of the .ir extension, since in the "old days" IR images were saved as .txt files. That's OK, new versions of IR will open these .txt IR files as well as .ir files) with all of the basic extender special protocols and baseline macros. You open this file in IR and assign devices, add upgrades, keymoves and design macros as normal. Easy-Peasy.
If, on the other hand, such a bare-bones IR.txt file is NOT provided in the extender .zip package, or you already have your remote pretty significantly customized with upgrades, Keymoves, Macros, etc, and wish to retain most of these, you may need/prefer to convert an existing unextended IR file:
(b) Converting an existing IR file.
(i) The program used to install the extender into your existing unextended file is EXTINSTALL.EXE. You must have this unzipped on your computer. (Future versions of RMIR may have this functionality built in and a separate download of EXTINSTALL.EXE MAY not be required, but for now, you have to get this program separately.)
What follows MAY CONTRADICT many of the extender readme's out there, since this MERGE capability in IR is newer than many extenders.
You need not "RUN" this program, as current versions of IR can automatically convert your unextended IR file into an extended one by calling this program.
(ii) In IR, go to File>Set Directory and ensure you have IR looking for Extinstall.exe in the right place.
(iii) Open your current IR file (should normally be UNextended, but can also work to convert from one version of an extender to a different version).
(iv) Go to File>Merge using Extinstall
(v) In the dialogue box, navigate to the folder where you unzipped the extender zip file and select the correct .hex file (i.e. 6012-2K-3.hex)
(vi) Give your new IR file a name and you're done.
(vii) NOW you start adding all of your extra keymoves, building all of your Special Protocol keymoves and Macros, etc.
You will notice that the newly-created IR file will already have predefined macros on the Device Keys. These are provided as a courtesy, and are simply Device Selection macros, so your extended remote's Device Keys would do exactly the same thing as in the unextended remote. Most people delete these and build their own, or as a minimum modify them heavily. I point this out, because some people, upon converting to an extender, believe that these macros are somehow MANDATORY and they most certainly are NOT.
What is "activating" the extender?
The extender is, however complex, simply a program that takes over the functioning of your remote, so just like any computer program, whenever you re-boot, you must start the program anew. For Extenders in JP1 (EEPROM) remotes, this usually takes the shape of a particular button press - for most extenders it is the "Power" or "OK" button in TV device mode. So after "installing" the extender (uploading the extender IR file to the remote), you must "activate" it in your remote by pressing the correct button (Check your particular ReadMe for the specific button press to activate it). This activation must be accomplished whenever your remote is reset (upload/download, battery change, etc...)
NOTE: Some extenders for the now more-prevalent JP1.3 (FLASH) remotes (e.g. the Atlas URC-1055 (JP1.3 version) and 1056) are written differently such that they do NOT deactivate upon battery replacement or uploading a new IR image. In these, the extender remains activated through battery changes, IR image uploads/downloads, etc, and must be manually DEACTIVATED to revert the remote to unextended operation. As always, read the readme for your specific extender.
What are all of these new Device and Protocol upgrades that have suddenly appeared?
I refer you to rule 1 - READ THE ASSOCIATED README, BUT....
In general, you can usually consider the extender itself to be simply a Protocol and Device upgrade, usually the FIRST-listed device upgrade and its associated protocol upgrade. In MOST extenders, these are Device TV/1800 and Protocol 0180.
Extenders for the current batch of JP1.X FLASH based remotes are FAR MORE than that, however, and parts of their code is hidden in areas of the Flash that are neither accessible nor visible to you, the user. Therefore you must follow the extender installation instructions exactly. NON-required steps, like "cleaning upper memory", are not only unhelpful, but can make your remote completely unresponsive, if some of the extender code was using that portion of the memory.
Device TV/1800 and Protocol 0180: DO NOT DELETE THIS DEVICE AND PROTOCOL UPGRADE! It IS the extender!
The other device and protocol upgrades are Special Protocols that have historically been found to be useful/liked by many, so they are automatically included in your extender upgrade. Again, your individual extender readme has the details, but typically, you get some combination of the below:
VCR or MISC/1800:0181 ToadTog
TV or MISC/1101:01FE Device Multiplexer
TV or MISC/1103:01FC Device Specific Macro
TV or MISC/1104:01FB Pause
TV or MISC/1106:01F9 Long/Double Keypress
TV or MISC/1107:01F8 Custom Mode Name (for LCD display)
If you have no need for one or more of these, you are free to delete the associated Device and Protocol upgrades, but sometimes it is a tedious process to re-install one of them once deleted, so I would recommend only doing so if you're really low on upgrade space.
How do I use them?
I refer you to rule 1 - READ THE ASSOCIATED README, BUT ... in general each "Special Protocol" is called by a sequence of hex commands. SOME of the extender Readme's describe how to create/write these hex commands but new versions of IR and RMIR make this easy. There is a "Special Protocols" tab that appears and walks you through setting up these functions using the plain-language button commands. In these circumstances the readme procedure is an obsolete one (except for CustomModeName):
What are they?
ToadTog: A "TOAD" is a "Toggle Only Activated Device", e.g. a TV that has a Power button that both turns it on and off but sends the same IR signal in both instances. Usually, for complex HT setups, one prefers to have DISCRETE Power On and Power Off signals that can be generated independently. The ToadTog allows you to create a Pseudo-discrete function for TOADs by setting and tracking a flag for whether or not the Power signal has been sent. Conversely, if your device has ONLY discrete On/Off functions, this allows you to make a single button ACT like a Toggle button using similar logic. ToadTog has many other uses, like when an input command cycles through various inputs and you need a SPECIFIC input to be selected, and other times you simply need the state of a device tracked to determine what signal or sequence of signals is sent.
Device Multiplexer: Allows you to stack two devices on a single button, and with a button press, change the assigned device on, say, your "DVD" button from your Pioneer DVD recorder to your Sony Blu-Ray player (or for example, change "zones" on your A-V receiver). It's most useful on remotes that do not have enough Devices for your HT system setup.
NOTE: Current versions of KM, RM, IR, and RMIR make it transparent whether particular functions are assigned directly to buttons within the body of an upgrade or keymoves created automatically by the software. When you use Multiplexer, however, only a SINGLE keymove can be assigned to any button for that device (see below for an exception), so you must be careful that you do not inadvertently try to "double-stack" keymoves on the same buttons because only one set will be active, regardless of which multiplexed device you have selected.
NOTE 2: The preceding note MAY become obsolete as new extender-writers are trying to overcome the limitation of a single set of keymoves per device index. As of this edit of this FAQ, only the URC-10820N extender beta has this feature. Others may get it in the future. Not to sound like a broken record, but, refer to the extender readme to see if yours is one of those unique new types.
Device Specific Macro: Allows you to create a macro which will only be called if the remote is in the specified device mode (e.g. TV or CBL). This is in contrast to ordinary macros which are "universal" i.e. called whenever the assigned button is pressed, regardless of the current device mode.
Pause: Allows you to insert a Pause of specified duration within a macro. This is useful if you have a device that takes a bit of time between powering-up and being able to process a subsequent command, for example.
Long/Double Keypress (LKP/DKP): Allows you to set up two distinct command sequences (which may themselves include other sequences like a ToadTog, DSM or Macro) on a single button which will execute ONE command if you press the button ONCE (or for a short duration) and a DIFFERENT command if you press the button TWICE (or hold it for a longer duration). I see this most commonly used on device setup and system setup macros, e.g. a SHORT press of the DVD button is used to simply put the remote in "DVD" mode, while a LONG press of the DVD button sends the entire sequence of commands required to turn on your TV, Receiver and DVD player, select all of the appropriate inputs, and leave the remote ready to operate the devices required for DVD viewing.
Custom Mode Name: Allows you to change what is displayed on the screen of a remote that has a LCD display. I believe that this has only been implemented on the URC-8910/9910/HT Pro extender and the RS 15-2116/2117 extender (but I may be mistaken).
All of these Special Protocol functions can be set up in IR and RMIR on the Special Protocols Tab, where their implementation is quite intuitive (with the exception of CustomModeName, for which you have to figure out the hex stream to type in manually, using the readme). If there is no Special Protocols Tab on your screen when you are editing in IR or RMIR then you have something wrong, like the incorrect RDF selected/assigned or some other error.
"I got a pop-up alert complaining about incorrect rdf!" or Uploading the extender IR file to your remote.
When you have built your extender .ir file in IR and you upload it to your remote, you will receive a pop-up window alerting you about mismatched rdfs. Each model of remote has a signature, and IR checks to see that the RDF file in use matches the signature. When an unextended remote is loaded with an extender, the signature is intentionally altered, causing a one-time mismatch between the remote's signature and the signature in the ir file. Just accept the upload.
"My remote's locked up and I can't do a reset!" or Deactivating the Extender
One of the "features" of most extenders is that they disable the "long-press-to-access-setup-mode" functioning of the "setup" (or "magic" or green "P") button. So if you need to reset your remote, due to whatever reason, you cannot access this function with the extender activated. To deactivate the extender with an EEPROM based remote, you have to remove a battery and press any button momentarily. When you reinstall the battery, the extender will still be loaded in the EEPROM, but the extender will not be activated, and you should be able to access the setup functions. Usually, the only useful function is the MFR reset (which erases your entire EEPROM), since stuff like Keymoves and Learning are all in different portions of the EEPROM in the extended remote than in the unextended, so any other function is likely to have mixed results, at best.
NOTE: In light of the above, although you could, theoretically, "learn" to a remote with the extender loaded but not activated, since the extender alters the remote's signature you will not be able to download those learns into IR or RMIR, and if you subsequently re-activate the extender, the learns may have overwritten parts of the extender code and your remote may not function. Therefore, it is recommended that[color=red][b] AFTER deactivating the extender but BEFORE doing anything requiring any other long-press Setup function you conduct a MFR reset (long press of setup followed by 981 on non-LCD remotes) before doing anything else. This will reset the remote signature.
NOTE 2: Some newer remotes (e.g. the Atlas URC-1055 (JP1.3 version) and 1056) have a new style extender that does NOT deactivate upon battery replacement, but requires a separate deactivation keypress. As always, read the readme for your specific extender.
How do I do device selection? (or "What is all of this Keygroup and Device index stuff?")
I again refer you to Rule 1 - Read the Readme file, but ....
Almost all extenders turn your device buttons into regular buttons. This allows you to program them with keymoves or macros, just like any other button. However, this eliminates their regular "unextended" behavior of simply selecting a device mode upon pressing a device button. The extender must therefore provide a means for you to create a device selection sequence of keymoves. (I must REALLY emphasize read the readme to see how YOUR extender does this)
Before we get to Device Selection, I want to dwell on a particular concept.
For greater flexibility, almost all extenders divide the remote's buttons into associated keygroups. (In fact, some of these keygroups are already associated in some manner within the remote's firmware, like the Volume group, the Transport group and the numbers group) The associations are usually functionally intuitive. The number and composition of these groups varies from remote to remote, but in general, one usually has:
Volume (Vol-, Vol+, and mute); Transport (Play, Pause, Stop, FF, Rew, Rec, maybe others); PIP (PIP on/off, Swap, Move, others possible); Menu (Menu, arrows, Select); Channel (CH+, CH-, Last or Prev, Fav,the number keys); and Other (Power, TV/Video, Light, Setup, etc.)
Check your readme for specifics.
Now in the extender you must assign EACH of these button groups to one of your device indexes, or they will do nothing. For the purpose of this discussion, we will simply use the term "device" in lieu of "device index". As opposed to an actual device, a device index is the term used for the location in EEPROM where a device code (either built-in or upgrade) is assigned. Although in the unextended remote these storage bins correspond exactly to the device name printed on the remote's device buttons, in the extended remote, the actual device button names are somewhat immaterial, but are retained and used as a convenient tool for tracking what setup code is assigned where.
Depending upon the extender writer's choice when developing the extender, this assignment of a button group, or "keyset" to a device mode (or button) is usually accomplished in one of two basic ways:
(a) Temporarily assign an "active device" within a macro, and assign keysets to that active device; or (b) Specific commands that assign keysets to a particular device.
amplifying (a): In the former scheme, you need at least TWO COMMANDS in a macro to assign a keyset to a device. For example, to set the transport keys to the VCR device, you would use the macro "DEV_VCR; SET_TRANS_KEYS"
So you are always using a TEMPORARY DEVICE SELECTION (only active until overridden by another or all macros being processed end) via a DEV_xxx command, and ASSIGNING the KEYSET to that device via a SET_xxx_KEYS command. (The most-recently-executed such assignment is retained for each button group upon completion of the macro or other sequence)
To assign ALL of the keys to one device (just like an unextended remote) you can make a simple macro: DEV_VCR, SET_VOL_KEYS, SET_PIP_KEYS, SET_TRANS_KEYS, SET_CHAN_KEYS, SET_MENU_KEYS, SET_OTHER_KEYS
or you can mix and match to have your remote set up to control your Receiver's Volume, your TV's PIP functions, your VCR's Transport functions and your SAT Box for everything else: DEV_RCVR, SET_VOL_KEYS, DEV_TV, SET_PIP_KEYS, DEV_VCR, SET_TRANS_KEYS, DEV_SAT, SET_OTHER_KEYS, SET_MENU_KEYS, SET_CHAN_KEYS
amplifying (b): In this scheme, a SINGLE command assigns a particular set of buttons to a device. For example, T_VCR assigns the transport buttons to the VCR.
The corresponding Device Selection macros to the examples in the previous scheme would be: Simple device selection: V_VCR, P_VCR, T_VCR, M_VCR, O_VCR, C_VCR and the customized macro would look like: V_RCVR, P_TV, T_VCR, M_SAT, O_SAT, C_SAT.
This scheme has a separate method for TEMPORARY DEVICE SELECTION for you to use within macros or other sequences, and that is use of an X_device command (X_TV or X_DVD).
For THIS PRECEDING PARAGRAPH IN PARTICULAR, I URGE YOU TO READ THE README CAREFULLY, since there is no fully standardized approach to the question of device selection amongst the various extenders.
Something isn't working like it's supposed to.
In case you have not yet figured this out:
READ THE EXTENDER'S README FILE!
In general, if that doesn't help, ask a question (with LOTS of detail) here in these fora. If it involves an IR file that isn't doing what you expect/want it to do, 90% of the time somebody will ask you to upload it to the diagnostic section of the JP1 forum and post a link to it there, so you'll save time getting your problem fixed by just doing this at the outset.