<< Return to Documents & HOWTOs

CPS Out of Band Modification HOWTO
v1.2 12/05/2008

Introduction

This document details how to make modifications to currently available CPS software to allow out of band programming.

This document primarily applies to both the Mobile and Portable packages of the Astro and Astro25 CPS. It may be applicable to other CPS packages - further experimentation may be required.

The Basics

Out of band (OOB) programming is the process of programming a frequency into a radio outside of its rated bandsplit. For example, Astro portables (such as the XTS3000) in the upper UHF split (which is called the UHF Range 2, or S split), have a rated bandsplit of 450-512. However, as with many modern RF components, the radio may function correctly when operating on frequencies several MHz outside of this bandsplit. CPS in fact allows for this, usually permitting programming of frequencies 5 to 7 MHz outside the rated bandsplit, albeit with very persistent warnings. However, even if the individual radio can perform beyond that limit, stock CPS will refuse to allow you to enter frequencies beyond the hard limit. That is where this HOWTO comes into play.

History & Notes

This HOWTO is based on the original WinCPS OOB document located at Batlabs. The original document described the proceedure using the popular HexWorkshop hex editor. I use a freely available hex editor called XVI32. The proceedure is essentially the same in either application.

Band Edge Tables

For each package (Mobile and Portable) there are two band edge tables, one for the lower band edges and one for the upper band edges. There is band info for various VHF, UHF, and 800 splits. Here we have the tables represented in MHz (except for that tricksy 162.55):

Table 1: Band Edge Table

Mobile
Portable
Lower Band Edge Tables
136 403 450 830 136 146 136 136 403 438 450 453 433

136 403 445 830 133 142 136 136 403 438 440 453 475

136 403 450 825 136 146 136 136 403 438 450 450 482

136 403 450 830 136 146 136 136 403 438 450 453 482

136 403 445 830 133 142 136 136 403 438 440 453 475

178 470 520 915 162.550 174 174 174 433 470 482 490

512 179 477 521 915 171 175 174 174 441 470 491 490

515
136 403 450 830 136 146 136 136 403 438 450 453 482

136 403 445 830 133 142 136 136 403 438 440 453 475

136 403 450 825 136 146 136 136 403 438 450 450 482

136 403 450 830 136 146 136 136 403 438 450 453 482

136 403 445 830 133 142 136 136 403 438 440 453 475

Upper Band Edge Tables
178 470 520 915 162.550 174 174 174 433 470 482 490

512 179 477 521 915 171 175 174 174 441 470 491 490

515
178 470 520 915 162.550 174 174 174 433 470 482 490

512 179 477 521 915 171 175 174 174 441 470 491 490

515


The band tables for the Astro25 software are somewhat different, mainly due to hardware capability. Bands include VHF, UHF, 700/800, and 900.

Please note that the Astro25 limits are not 100% verified at this time. Research is ongoing, and some experimentation may be needed.

Table 2: Band Edge Table - Astro25 (Conjectured)

Mobile
Portable
Combined Band Edge Tables
103        375        801        740
824.9875   901.9875   821.9875   806.0125
896.0125   136        380        450
830        136        146        136
136        403        438        450
453        481        764.00625  450
806.0125   896.0125   136        380
450        830        136        146
136        136        403        438
450        453        481        764.00625
450        851.0125   935.0125   136
403        450        825        136
146        136        136        403
438        450        450        482
764.00625  450        851.0125   935.0125
136        380        450        830
136        146        136        136
403        438        450        453
482        851.0125   450        851.0125
935.0125   136        380        450
830        136        146        136
136        403        438        450
453        482        851.0125   450
869.9875   940.9875   174        470
520        915        162        174
174        174        433        470
482        490        512        869.99375
488        869.9875   940.9875   174
470        520        915        162
174        174        174        433
470        482        490        512
869.99375  488        136        403
450        174        470        527
851.025    935.0125   136.075    403.15
450.075    136.025    146.025    403.025
438.025    450.025    453.025    482.025
851.025    450.075    806.0125   935.0125
136.025    403.1      450.025    136.05
146.05     403.05     438.05     450.05
453.05     482.05
103
136
136.025
136.05
136.075
146
146.025
146.05
162
174
375
380
403
403.025
403.05
403.1
403.15
433
438
438.025
438.05
450
450.025
450.05
450.075
453
453.025
453.05
470
481
482
482.025
482.05
488
490
512
520
527
740
764.00625
801
806.0125
821.9875
824.9875
825
830
851.0125
851.025
869.9875
869.99375
896.0125
901.9875
915
935.0125
940.9875
103
136
136.025

136.075
146
146.025

162
174
375
380
403
403.025

403.1
403.15
433
438
438.025

450
450.025

450.075
453
453.025



482
482.025

488
490
512
520
527
740
764.00625
801
806.0125
821.9875
824.9875
825
830
851.0125
851.025
869.9875
869.99375
896.0125
901.9875
915
935.0125
940.9875
103        375        801        740
824.9875   901.9875   821.9875   806.0125
896.0125   136        380        450
830        136        146        136
136        403        438        450
453        482        764.00625  450
806.0125   896.0125   136        380
450        830        136        146
136        136        403        438
450        453        482        764.00625
450        851.0125   935.0125   136
403        450        825        136
146        136        136        403
438        450        450        482
764.00625  450        851.0125   935.0125
136        380        450        830
136        146        136        136
403        438        450        453
482        851.0125   450        851.0125
935.0125   136        380        450
830        136        146        136
136        403        438        450
453        482        851.0125   450
869.9875   940.9875   174        520
520        915        162        174
174        174        433        520
482        490        512        869.99375
488        869.9875   940.9875   174
520        520        915        162
174        174        174        433
520        482        490        512
869.99375  488        136        403
450        174        520        527
851.025    935.0125   136.075    403.15
450.075    136.025    146.025    403.025
438.025    450.025    453.025    482.025
851.025    450.075    806.0125   935.0125
136.025    403.1      450.025


The Astro25 radios also cover the part of 700MHZ made available for public safety by the switch to digital TV. Motorola's original release of the software used a preliminary 700MHZ bandplan, which has since changed. The newer software takes this into account, but it also has the original band edges as well, so it can be somewhat confusing...

700MHz inputs are +30MHz from the outputs.

Table 3: Band Edge Table - Astro25 700MHz (Conjectured)

Lower Band Edge Tables
764.006250 769.006250 773.006250 794.006250 799.006250 803.006250
Upper Band Edge Tables
766.993750 775.993750 775.993750 796.993750


Finding the Values to Change

The band edge tables are a combination of soft and hard limits. The soft limites generally correspond with the radio's rated bandsplit. The hard limits correspond with the absolute limit outside the rated bandsplit that the stock CPS will allow frequencies to be programmed. Generally I change both the soft and hard limites, but just changing the soft limits will usually do the trick. Some experimentation may be required.

Modifiying a Band Edge

In the following example we will modify the CPS so that we can program 440 amateur radio frequencies into a S split (450-512) radio. The proceedure for any other band edge is the same.

Convert Values

Although in the band edge table above, the frequencies are show in MHZ, in the file they are stored in hex in the Intel (little endian) Unsigned Long format as Hz.

For example:

Frequency: 450 MHz
Frequency in Hz: 450000000
Frequenci in IUL: 80 74 D2 1A

So, let's go convert us some numbers.

Open up XVI32, and open up the CPS exe file. (You made a backup... right?). Go to "Tools > Encode Number...". Set the encoding options, type the frequency in Hz into the input box, and press enter.

Figure 1: Encoding Frequency by Hz to Intel Unsigned Long



In Figure 1, we see that we have configured the encoder for LongInt, and chosen to display the output in the output box. Copy the hex string, we'll need that later.

Search and Replace

Now that we know how to convert our original and target frequencies, let's go do a search and replace.

The first thing we need to determine is where in the file the original frequencies are. This can vary from version to version and platform to platform. We want to make sure we're replacing the right data, and not just data that happens to look like it.

If you refer to the portable lower band edge table above, we see that there are seven instances of 450 MHz in the table. What we're going to do is to convert hex strings for each instance plus the next value in the table. So we come up with the following strings:

Table 2: Converted Hex Strings

(Original Values)
Converted Hex String


(450 830)
80 74 D2 1A 80 CB 78 31

(450 453)
80 74 D2 1A 40 3B 00 1B

(450 825)
80 74 D2 1A 40 80 2C 31

(450 450)
80 74 D2 1A 80 74 D2 1A

(450 830)
80 74 D2 1A 80 CB 78 31

(450 453)
80 74 D2 1A 40 3B 00 1B


Note: There are two sets of 450 830 and 450 453, so you only have to convert them once. Also, there is a double 450 450 set, which means you really only need to convert six strings instead of seven.

Next, before you do any replacing, search the exe file for the above hex strings. You should find two instances each of the 450 830 and 450 453 sets, and one each of the 450 825 and 450 450 sets.

We're almost ready. Use the encoder to encode the Intel Unsigned Long for 440 MHz:

Table 3: Converted Hex String for 440 MHz

(Original Value)
Converted Hex String


(440)
00 DE 39 1A


Now it's time to replace. Use the find function to find each string in turn. Once you've located the string, go to "Edit > Overwrite String...". Paste in the 440 MHz hex string, and click on Overwrite. You've now replaced that instance of 450 MHz with 440 MHz. Remember for the 450 450 set you'll have to overwrite twice in a row.

Once you've replaced all the original values, save the modified file, and open CPS. You should now be able to program frequencies as low as 440.000 MHz into the CPS without it complaining.

Happy hacking!