Radio Shack PRO-2052 Dual Trunking Scanner Programming Howto

The PRO-2052 is RadioShack's* version of the Uniden BC235XLT.

[*RadioShack: You've got questions? We've got blank stares!]

There is a news group alt.radio.scanner.

There is also an active discussion group for the PRO-2052 at http://groups.yahoo.com/group/pro2052owners/

The purpose of this page is to help owners of the PRO-2052 to write custom software to control the scanner with a computer. I started out getting it to work with Windows before shifting it over to Linux so the code is Windows centric. I assume Linux users will have an easier time converting from Windows code than Windows users would have converting from Linux.

RadioShack will sell you a cable and MS Windows software package from Pozilla Software, for 29.99 plus 4.50 S/H. Mine arrived in 9 days, minus the cable. A standard serial cable works just fine (straight through, not a null modem cable), and you can experiment with the commands and responses with HyperTerminal or any communications software that will let you make a direct connection to the serial port. You don't need a high powered computer either. A Tandy Z-80 Model 4 will work just fine, as will a Palm Pilot. The default connection is 9600/N/8/1 with no flow control, and the scanner sends a carriage return character to terminate any codes it sends. Your software should terminate any command to the scanner with an ASCII Carriage Return. (^M is 13 decimal, 0x0D hex. A line feed is ^J (10 decimal), 0x0A hex.) It helps to set the communications software to add a line feed to the scanner's responses so that each response is on a new line. After connecting the cable, turn on the computer and the scanner and then press and hold the Remote/Hold button on the scanner until you see "SFT" flashing on the right side of the LCD. You should now be communicating with the scanner. If it doesn't work, check all the normal stuff for whatever it was you overlooked. NOTE: You can change the scanner's default baud rate by holding down the Remote/Hold button while turning on the scanner.)

Here is a simple sample interactive communication method to get a feel for what you can do. Assuming you are running some kind of MS Windows operating system you should have an aplet named HyperTerminal already on your computer. Look for it. In Windows 95 it is in Start | Programs | Accessories. If you don't have it, put your Windows CD in the tray, click on Start | Settings | Control Panel | Add/Remove Programs and click on the "Windows setup" tab. Double click "Communications" and click on the empty box next to "HyperTerminal". If it already has a check mark, then you have it installed already and will have to go look for it. It's named hypertrm.exe.

Start HyperTerminal and a "new connection" dialog box will pop up asking you to name the connection. Name it something such as PRO2052 and click "OK". In the next dialog box open the "Connect using" dropdown box and select something appropriate such as "Direct to com 1" and click "OK". In the next dialog box set the communication parameters to 9600 bits per second, 8 data bits, no parity, 1 stop bit and no flow control and click "OK" (After you have gone through this drill, the next time you start the program you can bypass the "new connection" box by clicking "cancel". Then use file | open to select the pro2052 profile). Now click file | properties, select the "settings" tab and click "ASCII setup". check "send line ends with line feeds", "echo typed characters locally" and "append line feeds to incoming line ends" and then click "OK" twice.

Linux users already know about minicom which will work just fine

Now configure the scanner for communication as discussed above and type QU and press Enter. The scanner should respond with QUF or QUN. If the response is QUF type QUN and press Enter. then type QU and press Enter and the scanner should respond with QUN. Now, turn down the squelch until it breaks and you should see a +. Turn the squelch back up and you should see a -.

Everything is working as it should. Experiment with some other commands and also observe the terminal when the scanner intercepts transmissions.

Of course the really neat stuff can only be done under program control combined with some kind of data base containing information about each frequency.

If you have any 2052 software that you wish to share, let me know and I will provide a link to it or make it available here for download.
Here's a QBASIC skeleton to demonstrate how to construct a program:
Note: If you don't have QBASIC and want it, look in the other\oldmsdos directory of a W95 or W98 CD

If you are familiar with any other programming language, it will work as well; the programming required is not very high tech. I picked QBASIC for this how-to because almost anyone can read it and figure out what's going on. If the program can send and receive data from a serial port, read and write to a file, and read from the keyboard and write to the screen, you're all set. You just have to listen to the serial port for either of the two characters "+" and "-". That tells you when the scanner starts or finishes receiving a signal. Then you (or preferably your program) query the scanner to find out what just happened or what the settings are, etc. Save what you want to a file, send information to the screen, build a few subroutines to do whatever it is you want to do and you're all set to enjoy your scanner.

	OPEN "COM1:9600,N,8,1,CD0,CS0,DS0,OP0,RS,TB100,RB100" FOR RANDOM AS #1
	CLS
	PRINT "PRO2052 Scanner Program - Press any key to abort"
	PRINT #1, "MD" ' get mode from scanner
	FOR x = 1 TO 20000: NEXT x ' insert some delay. This for a 233 Mhz
	WHILE LOC(1) = 0: WEND  'WAIT FOR DATA
	r$ = INPUT$(LOC(1), #1) 'READ DATA
	IF MID$(r$, 1, 4) = "MD00" THEN PRINT "Scanning" ELSE PRINT "Manual": END

	DO
	WHILE LOC(1) = 0
	KB$ = INKEY$ ' STROBE KEYBOARD FOR KEYPRESS
	IF KB$ <> "" THEN CLOSE : PRINT "CLOSED": END
	WEND  'WAIT FOR DATA
       
	r$ = INPUT$(LOC(1), #1) 'READ DATA
	IF r$ = "+" THEN
	PRINT "RECEIVING"
	FOR x = 1 TO 10000: NEXT x
	PRINT #1, "MA" 'GET CURRENT CHANNEL STATUS
	FOR x = 1 TO 10000: NEXT x
	ELSEIF r$ = "-" THEN
	PRINT "Scanning"
	ELSE
	IF LEN(r$) > 1 THEN PRINT "CHAN "; MID$(r$, 3, 3); " Freq "; MID$(r$, 8, 4); "."; MID$(r$, 12, 4)
	END IF
	LOOP

Download this code I am offering no support because I don't have time. This code is an exact copy of a working model using QBASIC Version 1.1

Click here to download a sample I/O program. This program demonstrates one way to do disk Input/Output.

Here's a tip for those trying to use Tcl/Tk to control the scanner (A good choice). Set the translation for MacIntosh. i.e. -translation cr. This will convert the cr that the scanner sends to a linefeed, and convert the linefeed that your program sends to the scanner to a carriage return. The scanner wants only a carriage return after the data. Anything else will cause an error. This will also work if you are using a Windows platform with Cygwin and Tcl/Tk

The key to real-time monitoring of the scanner is the Squelch Monitor. It's status can be checked with the QU command. If it is on, the scanner sends QUN and if it's off the scanner sends QUF. To turn the squelch monitor on, send the QUN command. After that, the scanner will return a + (plus sign) when squelch is broken (i.e. a transmission is being received) and will return a - (minus sign) when the transmission ceases. Your software will monitor the serial port for these two characters.

Everything else is obvious, especially if you have the owner's manual which lists the commands and responses. You can also download the pc/remote documentation from Radio Shack or dial their FAX retrieval system at (800) 323-6586 and get document # 58689. For other documentation on the scanner visit here or get FAX document 57915.

If you are a programmer, there is nothing else here that you need. What follows is just the same stuff that's either in the manual or the docs mentioned above.


The main reason I wrote my own software to control the scanner is to go beyond the functionality of the Pozilla program, and to do it with Linux. The Pozilla program is buggy, but it works and it's cute.


This table is for emulating the physical pressing of a button. For example, say you wanted to walk over to the scanner and press the "Priority" button. Instead of doing that, just send the Characters
K E Y 0 5 <CR>
and it will have the same effect.
Buttons
Scan KEY00
Manual KEY01
Select 0-9 KEY02#
Decimal PointKEY03
Enter KEY04
Priority KEY05
LockOut KEY06
Hold KEY07
Limit KEY08
Search KEY09
SVC KEY10
Data KEY11
Delay KEY12
Trunk KEY13
Shift KEY14
Scanner Responses
NG Invalid command
ERR Command format error
ORER Overrun error
OK Command Received
Cxxx Channel number
FxxxxxxxxFrequency
TN Trunking Frequency
TF Conventional Frequency
xN (Function) On
xF (Function) Off
Scanner Mode Code Responses
00Scan
01Manual
02Limit Search
03Limit Search Hold
04Service Scan
05Service Scan Hold
06Program
07EDACS Program
08System Program
09ID Search
10ID Search Hold
11ID Scan
12ID Manual
13ID Lockout Review
14Search Control Channel
15EDACS ID Search
16EDACS ID Hold
17EDACS ID Scan
18EDACS ID Manual
19EDACS ID Lockout
20EDACS Search Control Channel
21VFO
Computer to Scanner Functions
Check the scanner's modeMD
Clear the scanner's memoryAC
Check scanner modulation settingRM
Check if Squelch Monitor is onQU
Turn Squelch Monitor on/offQUN/QUF
Check if Squelch is openSQ
Check a bank's priority channel numberPC[A-T]
Set a bank's priority channelPC[A-T]###
Check if Priority is onPR
Turn Priority on/offPRN/PRF
Check if Priority Monitor is onRI
Turn Priority Monitor on/offRIN/RIF
Check which banks are activeSB
Select banks for scanningSB[A-T]
Tune scanner to a specific frequencyRF########
Go to a specific channelMA###
Check the status of the current channelMA
Add a frequency to a channelPM### ########
Check a frequency stored in a channelPM###
Check if Delay is onDL
Check if Data Skip is onDS
Check if Lockout is onLO
Set the lower limit frequencyLL########
Check the lower limit frequencyLL
Set the upper limit frequencyLU########
Check the upper limit frequencyLU
Check for a frequency in search skip memorySS##
Enter a frequency in search skip memorySS########
There are an additional 28 Trunk mode commands
Scanner Specifications
Frequency Coverage (29 - 1300 Mhz)
10 Meter Amateur29.0000-29.69505 kHz
VHF Lo27.7000-49.99505 kHz
6 Meter Amateur50.0000-54.00005 kHz
Aircraft108.0000-136.975012.5 kHz
Government137.0000-143.99505 kHz
2 Meter Amateur144.0000-147.99505 kHz
VHF Hi148.0000-174.00005 kHz
VHF TV179.7500-215-75006 MHz
1 Meter Amateur216.000-224.9955 kHz
VHF Aircraft225.0000-399.987512.5 kHz
Amateur/Government400.0000-419.987512.5 kHZ
70 cm Amateur420.0000-449.987512.5 kHz
UHF Standard450.0000-469.987512.5 kHz
UHF "T"470.0000-512.000012.5 kHz
Public Sevice806.0000-823.937512.5 kHz
Public Service/Trunking Repeater851.0000-868.987512.5 kHz
Public Service896.1125-956.000012.5 kHz
25 cm Amateur1240.0000-1300.000012.5 kHz

Send mail to the Webmaster

logo This site best viewed with a browser
Warning: This is a Debian centric site and MAY contain peanuts.
Many thanks to Debra Lynn and Ian Murdock for making Debian possible
First created Apr 22, 2008 ~ Last revised March 22, 2010

Valid XHTML 1.0 Strict Valid CSS!