U-OFA-URC: Making Extended Function Code Tables

U-OFA-URC: Making Your Own Extended Function Code Tables

Home | Setup Codes | Pictures | Make EFC Table | Serial Cable | Serial Software
John Somer's Program | David Huras's Page | Ziggr's Page

An Extended Function Code table for a device will tell you what One-For-All three-digit "Extended Function Codes" (EFC's) will perform each of the functions of your original remote control buttons. You can get tables from Universal Electronics but they have several deficiencies:

You can create your own EFC tables by following the three simple steps shown below.

Step 1: Find one valid EFC

If you already have an EFC table from Universal Electronics then pick any EFC from that table and go on to step 2.

If you don't have an EFC table from Universal Electronics you must test different codes until you find one that does something. Two search methods are described below. I would recommend trying the first row or two from the Search Method 1 table before trying Search Method 2.

The method for testing an EFC varies from model to model. In most (all?) cases you press the "Magic" button (or the "Shift" button if your model has no "Magic" button) and then press each digit of the three digit EFC. Be sure to release each button before pressing the next button. Of course it is best to have your equipment in whatever state will make it most receptive to having something noticable happen (turned on, for example).

When your equipment does something, note the EFC and go on to Step 2.

Search Method 1: Frequency of Use

Since some of the EFC's are used far more often than others we should be able to shorten the search in most cases by using an old code-breaker's trick: a "frequency of use table". Table One (below) contains all 256 EFC's in roughly "frequency of use" order (most frequently used EFC's at the top).

Table One: EFC's by Frequency of Use (V1.0)

One-For-All Extended Function Codes (EFC's) in approximate descending order of frequency of use:
571 377 612 238 438 492 279 629 437 635 568 246 248 500 251 443
652 420 558 683 465 378 408 276 660 308 565 423 630 370 306 305
233 313 677 334 506 411 698 720 680 548 566 466 468 725 311 594
627 314 624 689 560 296 425 485 534 491 666 657 268 369 231 375
658 690 243 498 240 728 632 702 406 503 300 299 333 602 405 536
440 495 486 678 364 642 357 450 692 435 584 330 347 539 622 621
228 695 281 234 596 665 697 288 655 582 237 358 449 563 593 526
488 553 344 432 575 430 718 382 293 294 372 551 360 342 617 391
483 323 651 426 282 291 384 540 641 497 648 286 615 738 403 480
474 363 388 252 400 264 255 245 339 531 723 267 522 731 274 669
645 533 545 704 505 258 587 324 381 477 285 670 261 543 608 317
512 367 528 463 327 418 387 707 554 510 460 444 341 273 318 429
687 262 471 599 546 303 397 636 684 417 456 320 393 447 577 717
601 646 336 663 726 515 459 271 516 521 478 454 711 618 708 572
525 581 453 735 713 415 519 354 394 714 701 348 672 412 473 732
557 509 578 351 329 606 588 639 611 353 257 398 605 737 675 591

Search Method 2: Sequential Search

If you have ever seen an EFC table you may have noticed that EFC's go up to over 700... a daunting prospect! Fortunately they only really use 256 codes and factors of 256 don't make a difference: 010 acts the same as 266 and 522. Any 256 consecutive numbers between 000 and 768 will cover all the possibilities. Since three digits are always used it might be best to start at 100 and use the range 100 to 355. Computer programmers, who are used to such foolishness as significant leading zeroes, may wish to start at 000 and use the range 000 to 255.

Step 2: Find the Original Button Code (OBC)

Each button of a remote control transmits a pair of numbers. One number is determined by the device code and the other number is determined by which button was pressed. We will call this second number the Original Button Code (OBC) since it is the number sent by the original remote for a particular button. Each EFC represents a single OBC.

In most remote controls the OBC's are numbered in some sort of regular pattern based on the relative positions of the buttons on the remote control. This is NOT the case with the EFC's which appear to be assigned in a deliberately scrambled order. To make it easier to find the other EFC's you have to translate one EFC to an OBC.

Table Two (below) is an EFC to OBC translation table. If the EFC you found is greater than 255 you have to subtract 256 from the EFC until you get a number from 0 to 255. For example if the EFC is 605 you would subtract 256 to get 347 and again to get 93.

Table Two: EFC to Button Code Translation (V2.0)

The original remote button codes in EFC order.
  0->157   1->153   2->159   3->155   4->124   5->120   6->126   7->122   8->125   9->121  
 10->127  11->123  12->252  13->248  14->254  15->250  16->253  17->249  18->255  19->251
 20->60   21->56   22->62   23->58   24->61   25->57   26->63   27->59   28->188  29->184
 30->190  31->186  32->189  33->185  34->191  35->187  36->76   37->72   38->78   39->74
 40->77   41->73   42->79   43->75   44->204  45->200  46->206  47->202  48->205  49->201
 50->207  51->203  52->12   53->8    54->14   55->10   56->13   57->9    58->15   59->11
 60->140  61->136  62->142  63->138  64->141  65->137  66->143  67->139  68->108  69->104
 70->110  71->106  72->109  73->105  74->111  75->107  76->236  77->232  78->238  79->234
 80->237  81->233  82->239  83->235  84->44   85->40   86->46   87->42   88->45   89->41
 90->47   91->43   92->172  93->168  94->174  95->170  96->173  97->169  98->175  99->171
100->84  101->80  102->86  103->82  104->85  105->81  106->87  107->83  108->212 109->208
110->214 111->210 112->213 113->209 114->215 115->211 116->20  117->16  118->22  119->18
120->21  121->17  122->23  123->19  124->148 125->144 126->150 127->146 128->149 129->145
130->151 131->147 132->116 133->112 134->118 135->114 136->117 137->113 138->119 139->115
140->244 141->240 142->246 143->242 144->245 145->241 146->247 147->243 148->52  149->48
150->54  151->50  152->53  153->49  154->55  155->51  156->180 157->176 158->182 159->178
160->181 161->177 162->183 163->179 164->68  165->64  166->70  167->66  168->69  169->65
170->71  171->67  172->196 173->192 174->198 175->194 176->197 177->193 178->199 179->195
180->4   181->0   182->6   183->2   184->5   185->1   186->7   187->3   188->132 189->128
190->134 191->130 192->133 193->129 194->135 195->131 196->100 197->96  198->102 199->98
200->101 201->97  202->103 203->99  204->228 205->224 206->230 207->226 208->229 209->225
210->231 211->227 212->36  213->32  214->38  215->34  216->37  217->33  218->39  219->35
220->164 221->160 222->166 223->162 224->165 225->161 226->167 227->163 228->92  229->88
230->94  231->90  232->93  233->89  234->95  235->91  236->220 237->216 238->222 239->218
240->221 241->217 242->223 243->219 244->28  245->24  246->30  247->26  248->29  249->25
250->31  251->27  252->156 253->152 254->158 255->154

Now that you have an OBC it is time to go on to...

Step 3: Find the other EFC's

Since, as we said, the OBC's are pretty much consecutive, and you know one OBC, you should be able to find most other EFC's by trying ones that have similar OBC's. Table Three (below) is a table of EFC's in OBC order. Use your known OBC to find a starting point in this table. Try EFC's to the left and right of that point. Since the remote is a little computer it uses binary numbers and does things in powers of two. Try skipping forward and back by 2, 4, 8, 16 and 32 places. Since there are 8 entries in a row, going up or dow by 1, 2 or 4 rows is the same as skipping by 8, 16, and 32 places.

If you are writing a C program you can use this C macro instead of the table:

// Translate an OBC to an EFC from 100 to 355
#define OBCtoEFC(OBC) (((((unsigned char)(OBC))>>5)+(((unsigned char)(OBC))<<3)) ^ 0x51) + 100;

Table Three: OBC to EFC Translation (V2.0)

One-For-All EFC's in OBC order.
  0->437   1->697   2->695   3->443   4->692   5->440   6->438   7->698 
  8->565   9->313  10->311  11->571  12->308  13->568  14->566  15->314 
 16->629  17->377  18->375  19->635  20->372  21->632  22->630  23->378
 24->245  25->505  26->503  27->251  28->500  29->248  30->246  31->506
 32->725  33->473  34->471  35->731  36->468  37->728  38->726  39->474
 40->341  41->601  42->599  43->347  44->596  45->344  46->342  47->602
 48->405  49->665  50->663  51->411  52->660  53->408  54->406  55->666
 56->533  57->281  58->279  59->539  60->276  61->536  62->534  63->282
 64->677  65->425  66->423  67->683  68->420  69->680  70->678  71->426
 72->293  73->553  74->551  75->299  76->548  77->296  78->294  79->554
 80->357  81->617  82->615  83->363  84->612  85->360  86->358  87->618
 88->485  89->233  90->231  91->491  92->228  93->488  94->486  95->234
 96->453  97->713  98->711  99->459 100->708 101->456 102->454 103->714
104->581 105->329 106->327 107->587 108->324 109->584 110->582 111->330
112->645 113->393 114->391 115->651 116->388 117->648 118->646 119->394
120->261 121->521 122->519 123->267 124->516 125->264 126->262 127->522
128->701 129->449 130->447 131->707 132->444 133->704 134->702 135->450
136->317 137->577 138->575 139->323 140->572 141->320 142->318 143->578
144->381 145->641 146->639 147->387 148->636 149->384 150->382 151->642
152->509 153->257 154->255 155->515 156->252 157->512 158->510 159->258
160->477 161->737 162->735 163->483 164->732 165->480 166->478 167->738
168->605 169->353 170->351 171->611 172->348 173->608 174->606 175->354
176->669 177->417 178->415 179->675 180->412 181->672 182->670 183->418
184->285 185->545 186->543 187->291 188->540 189->288 190->286 191->546
192->429 193->689 194->687 195->435 196->684 197->432 198->430 199->690
200->557 201->305 202->303 203->563 204->300 205->560 206->558 207->306
208->621 209->369 210->367 211->627 212->364 213->624 214->622 215->370
216->237 217->497 218->495 219->243 220->492 221->240 222->238 223->498
224->717 225->465 226->463 227->723 228->460 229->720 230->718 231->466
232->333 233->593 234->591 235->339 236->588 237->336 238->334 239->594
240->397 241->657 242->655 243->403 244->652 245->400 246->398 247->658
248->525 249->273 250->271 251->531 252->268 253->528 254->526 255->274

One good technique is to draw a diagram of your original remote control and note the OBC and EFC for each button you identify. After you find a few buttons you may start seeing patterns like: "going down a column the OBC's seem to go in steps of 8". Noticing patterns will help you guess OBC's for other buttons.

Another good technique is to print Table 3 and write the button name for each OBC->EFC you find. After you find a few buttons you may start seeing patterns like: "the number keys seem to be in order down this column skipping by 2". Noticing patterns will help you guess OBC's for other buttons.

Problems

This technique is not foolproof. There are several reasons for it to fail.
  1. Some remotes generate codes for muliple devices as well as different button codes for the same device. The tables from Universal Electronics will generally tell you what other device codes you may need.
  2. The buttons on the original remote may NOT be numbered in any rational order.

    Credits

    The new V2.0 tables and OBC/EFC translation algorithm were developed by John S. Fine (mailto:johnfine@erols.com) based on the signals generated by the buttons of several original remotes and their OFA equivalents. His tables are likely to be much more accurate than my original (1.0) tables because his are based on more solid data. If you find these tables useful thank him, not me. If you think the tables are wrong , please contact me at U_OFA_URC@John-Wasser.com. If I change the tables due to new information I will change the version numbers shown above.


    Home | Forums | Manuals | Files | Infra Red | JP1 Upgrades | Setup Codes | Advanced Codes | Links