Programming Software Landscape (Scanners) · Volume 1
Programming Software Landscape (Scanners)
ProScan, Sentinel, FreeScan, and codeplug backup discipline

1.1 About this volume
The programming-software landscape for the bench’s radios is fragmented by design, by accident, and by vendor incentive. Every Uniden scanner family has its own CPS — and Uniden ships THREE different CPS tools to cover the lineup, none of which fully overlap with the other two. Every DMR vendor (AnyTone, Connect Systems, TYT, Anytone-clone variants) ships their own Windows-only CPS, and the codeplug formats are mutually incompatible. CHIRP, the open-source cross-vendor unifier, gets close to “one tool to program them all” on the budget HT side — but stops dead at DMR, at Uniden scanners, and at Icom HF. The full picture is six discrete software ecosystems for the twenty-one programmable radios on the bench, plus the browser-based dashboards on the two hotspots.
This volume catalogs the six ecosystems — what each does, what radios it touches, what platform it runs on, what version is archived in programs/, and which cross-link in the per-radio volumes connects back here. Cross-links into this volume come from every per-radio volume’s §4 (Programming workflow); cross-links out point back to each radio’s volume for the radio-specific operating procedures, codeplug structure, and field workflows.
The persistent friction in this landscape is Windows-only-ness. Five of the six tools (ProScan, Sentinel, FreeScan, AnyTone CPS, all the vendor-specific Uniden tooling) are Windows-only — by deliberate vendor choice, not technical necessity, because the install base of Windows in the licensed-radio market dominates and there’s no commercial pressure to port. Only CHIRP and wfView are cross-platform — both of those are free open-source community projects, which is not a coincidence. Practical posture: the shack-room T480 dual-boot includes Windows 11 Pro specifically to host the vendor CPS tools; cross-link to Parrot OS Vol 3 (Dual-boot architecture) for the dual-boot rationale. The Parrot Linux side runs CHIRP and wfView (or stays out of the way and lets the Windows partition do the CPS work).
The naming + ownership matters: ProScan is a paid third-party product (Bill Davis, W6BD; not Uniden); Sentinel is Uniden’s free first-party tool (bundled with the radio); FreeScan is a free third-party community tool (no affiliation with Uniden) that supports the older Uniden lineup that Sentinel never covered. The three are NOT successors to each other — they’re parallel offerings for different (overlapping) parts of the Uniden product line, each with different strengths and different blind spots. Picking which CPS to use for a given Uniden scanner is the first programming decision and it’s not always obvious. §2-4 disambiguate the three.
The cross-cutting discipline in §8 — versioning and backup hygiene — applies to every CPS in the landscape and is the single most important habit. A bricked codeplug after a firmware update is the single most common failure mode in the entire bench; the cure is always “restore the last known good codeplug from programs/” and that cure only works if the discipline has been kept.
The full landscape cross-link grid:
Table 1 — The full landscape cross-link grid
| Software | OS | Cost | Vendor | Radios covered |
|---|---|---|---|---|
| ProScan | Windows | ~$50 lifetime | Bill Davis (W6BD) — third-party paid | SDS100, SDS200, BCD536HP, BCD436HP, BCD396XT, BCD325P2, others (broad Uniden coverage) |
| Sentinel | Windows | Free | Uniden — first-party | BCD436HP, BCD536HP, SDS100, SDS200, Homepatrol family |
| FreeScan | Windows (Wine works) | Free | ARC/Butel — third-party | BC246T, BC346XT, BCD396XT, BC125AT, BC75XLT, others (older Uniden) |
| AnyTone CPS | Windows | Free | AnyTone — first-party | AT-D878UVII PLUS (and family) |
| wfView | Win/Mac/Linux | Free (GPL) | Open-source community | Icom HF transceivers via CI-V — IC-7300, IC-9700, IC-705, IC-7610, others |
| CHIRP | Win/Mac/Linux | Free (GPL) | Open-source community | Hundreds of models — Baofeng UV-5R/F8HP/UV-B5, Yaesu VX-8/FT-60, TYT, Wouxun, dozens more (NOT AnyTone DMR, NOT Uniden scanners) |
Cross-links to the synthesis siblings: Vol 1 (Overview) §7 has the preview of this table; Vol 2 (DMR Network) covers the talkgroup-and-contact data that AnyTone CPS imports (RadioID CSVs, BrandMeister rosters); Vol 4 (Frequency Planning) covers the per-band frequency assignments that get poured into codeplugs across CHIRP and ProScan.
1.2 ProScan (Uniden CPS for SDS100/SDS200/BCD536HP/BCD396XT)
ProScan is a third-party programmer/controller for Uniden DMA-architecture scanners — the only paid CPS in the bench landscape, and the most full-featured of the three Uniden options. It’s authored and maintained by Bill Davis, W6BD, a single-developer commercial product that has been steadily updated since the SDS100 launched in 2018. The license + installer + the two archived versions (24.0, 24.4) are in programs/proscan/.
1.2.1 What it is, what it isn’t
ProScan is two products in one:
- A codeplug editor that reads and writes Uniden DMA
Profile.dat-style codeplugs to/from the scanner, with substantially more power-user features than Sentinel. Bulk channel edits, side-by-side codeplug diff, filter-based selection, advanced spreadsheet-like editing, drag-and-drop sorting, mass renaming, conditional alerts. - A PC-side controller that connects to the running scanner over USB and presents a live virtual remote head — mirrored display, button controls, full audio routing, recording of received audio per-channel, logging of system activity, RadioReference database lookup of unknown talkgroups in real time.
The two halves connect into a workflow: edit the codeplug on the PC, push it to the radio, monitor and refine while listening. The codeplug-only path (load, edit, save, push) is the “Sentinel replacement”; the controller half is what makes ProScan worth paying for.
It is NOT a firmware-update tool — Uniden firmware updates are still pushed via Sentinel (Uniden’s own utility). ProScan never touches the firmware; it only reads/writes the user-data partition.
1.2.2 The web-server remote control
The killer feature for the multi-floor shack: ProScan includes a built-in web server that mirrors the scanner display and controls to any web browser on the LAN. Configure the listening port (default 8080), open http://shack-pc:8080 from a laptop, phone, or tablet anywhere on the network — you see the scanner’s display in real time, button presses on the web page send commands to the scanner. Receive audio is streamed over the same socket (configurable codec).
The typical posture here: the SDS200 lives in the basement shack on the discone-fed bench; the laptop in the second-floor office hits the ProScan web server to monitor incident traffic while doing day-job work without going down two flights of stairs. The web server costs essentially nothing in CPU on the shack PC and adds zero RF; it’s the cleanest “remote scanner” architecture available short of a full SDR + HTTPS streaming setup.
The web server also supports HTTPS with a self-signed cert and basic-auth password protection. Always set the password if exposing beyond localhost; the default is unauthenticated, and an open ProScan web server on a home LAN is a minor information disclosure (anyone on the network can monitor what you’re listening to).
1.2.3 RadioReference subscription integration
ProScan’s deepest integration is with RadioReference.com — the canonical North American frequency database. With a RadioReference Premium subscription (~$30/year), ProScan can:
- Download the database for a county/state/agency directly into the codeplug — no manual frequency-by-frequency entry.
- Live-lookup unknown talkgroup IDs received during scanning, populating the alpha tag from the RR database.
- Pull system updates (new frequencies, retuned trunked systems, renamed talkgroups) on demand.
- Use the RR “wiki” entries to populate the codeplug’s alpha tags with descriptive names (“Wayne Co Sheriff Dispatch” rather than “TG 1234”).
This is the workflow that turns the SDS100/SDS200 from “a radio with a complicated codeplug” into “a radio that just works for your area.” The Sentinel equivalent (favorites-list import from RadioReference) works but is clunkier and lacks ProScan’s filter-and-bulk-edit power.
Cross-link: per-radio RR setup notes are in Vol 13 (SDS100) §4 and Vol 14 (SDS200) §4. The RR subscription itself is at https://www.radioreference.com/apps/content/?cid=2.
1.2.4 Pricing model — lifetime license, periodic upgrades
ProScan is ~$50 USD lifetime license as of mid-2026 (TBD — verify against the current ProScan product page; pricing has shifted slightly over the years and Bill periodically offers upgrade pricing for major version transitions). License is per-installation and tied to a registration key; the key works across reinstalls on the same PC and (with a courtesy request to Bill) on a new PC after hardware change.
The pricing model is unusual in the CPS world: Sentinel is free, FreeScan is free, vendor CPS for AnyTone is free, CHIRP is free — only ProScan asks for money. The justification is the depth of the controller-and-web-server feature set and the single-developer maintenance load. For a casual scanner user, the free Sentinel is sufficient; for the power user who programs frequently, manages multiple radios, or wants remote operation, the $50 is small relative to the time it saves.
1.2.5 Versions archived in programs/proscan/
Two ProScan installer versions are kept in the project tree for rollback safety:
- Version 24.0 — the baseline version running on the SDS200 since ~2024.
- Version 24.4 — the current upgrade, has additional support for newer P25 Phase II system variants and a UI refresh.
The license key activates both. The rollback discipline: if a new ProScan version misbehaves with a codeplug or controller workflow, reinstall the previous version from the archived installer; the license key still works. Cross-link to §8 (Codeplug versioning) for the parallel codeplug-versioning discipline that complements installer versioning.
1.2.6 Cross-links to the per-radio vols
- Vol 13 (SDS100) — handheld P25 flagship; ProScan is the recommended CPS for serious programming.
- Vol 14 (SDS200) — base/mobile P25 flagship; ProScan is the daily driver for the shack’s primary scanner.
- Vol 15 (BCD536HP) — base/mobile mid-tier; ProScan supports it fully.
- Vol 16 (BCD396XT) — handheld mid-tier; ProScan supports it (older DMA architecture but same software path).
ProScan does NOT support: legacy non-DMA Uniden scanners (BC246T, BC355N, BC350A, BC75XLT — those are FreeScan territory), the Homepatrol-1 (Sentinel territory), or anything non-Uniden.
1.3 Sentinel (Uniden CPS for BCDx36HP family)
Sentinel is Uniden’s free, first-party programming utility for the DMA-architecture scanners — BCD436HP, BCD536HP, SDS100, SDS200, and the Homepatrol family. It’s not a competitor to ProScan; it’s the required tool for firmware updates and the default CPS that ships with the radio. Every Uniden DMA scanner owner has it whether they intend to use ProScan or not.
Sentinel is in programs/uniden-misc/Sentinel.zip (current version as archived; TBD — verify version number against Uniden’s current download page).
1.3.1 What it does — three functions
Sentinel has three jobs:
- Firmware updates. The only path to flash new firmware to a Uniden DMA scanner. Plug in the radio over USB in mass-storage mode, launch Sentinel, click “Update Firmware,” let it download and write. Firmware updates are infrequent (one or two per year typically) but unavoidable — new P25 Phase II decoder improvements, new trunked-system support, occasional security/stability fixes. Always backup the codeplug before a firmware update (see §8); firmware updates have a non-zero chance of invalidating an older codeplug schema and you’ll need to restore.
- Codeplug edit. Reads the
Profile.datfile directly from the scanner’s microSD card (which mounts as a USB mass-storage device when the radio is plugged in), edits the systems/sites/channels/favorites lists in a Windows-native UI, writes back to the SD. Adequate for casual programming — adding a favorite list, importing from RadioReference, editing scan groups — but lacks ProScan’s bulk-edit power. - Discovery mode. A unique feature for unknown trunked systems — point the radio at a system you’ve never heard before, let Sentinel and the radio cooperate to identify the control channel, decode the system ID, and populate the codeplug entry automatically. Useful when you’ve moved to a new area or when a local agency retunes their system and you want the radio to figure out the new layout without manual research.
1.3.2 The Profile.dat workflow
Every Uniden DMA scanner stores its entire user-data partition (channels, systems, sites, favorites, scan lists, GPS data, alerts, configuration) in a single file: Profile.dat on the scanner’s internal microSD. Connect the radio over USB, the microSD enumerates as a removable drive, and Profile.dat is in the root of that drive.
Sentinel mediates all access to this file — it reads the binary structure, presents it as a navigable UI, and writes the modified structure back. Never edit Profile.dat by hand with a hex editor; the structure includes CRCs, indexed pointer tables, and version flags that hand-editing will silently corrupt. Treat the file as opaque; use Sentinel or ProScan to manipulate it.
For backups, copy Profile.dat directly. A backup is just cp Profile.dat Profile-backup-YYYY-MM-DD.dat (or the Windows Explorer equivalent). Restore is the reverse: copy the backup back into place over the working Profile.dat. This is the simplest, most reliable backup mechanism on the entire bench — no tooling required beyond a file manager.
1.3.3 Discovery mode deep dive
The discovery feature is worth its own paragraph because nothing else in the landscape has anything like it. When pointed at an unknown trunked system:
- Set the radio to discovery mode (Menu → System → Discovery, or similar; exact path depends on model and firmware).
- Tune the radio to the suspected control channel frequency (or let it sweep a frequency range — Discovery will find the control channel itself).
- The radio decodes the control channel, identifies the system type (P25 Phase I, P25 Phase II, Motorola Type II, EDACS, LTR — the scanner figures it out from the protocol signatures), reads the system ID, and may begin to log talkgroup activity.
- Connect to Sentinel; Sentinel reads the discovery log from the radio and offers to add the discovered system to the codeplug with one click, prepopulating frequencies, system ID, and any talkgroups that were active during the discovery window.
For a moving operator (RV traveler, road-trip ham operator), Discovery turns “I’m in an unfamiliar county” into “the scanner is configured in 10 minutes without ever visiting RadioReference.” For a stationary operator, it’s how you handle a local agency that retunes their system between scheduled RR updates.
1.3.4 The Sentinel vs. ProScan decision
When to use Sentinel:
- You only have one radio. No need for ProScan’s batch operations across multiple codeplugs.
- You don’t want to pay. Sentinel is free; ProScan is $50.
- You only need basic codeplug edits. Add a favorite, edit a scan list, run a firmware update.
- You need to do a firmware update. No choice — Sentinel only.
- You want Discovery mode. No choice — Sentinel only.
When to step up to ProScan:
- You program multiple radios and want to copy systems/talkgroups between codeplugs (Sentinel can’t diff or merge codeplugs; ProScan can).
- You want bulk edits — renaming 200 talkgroups consistently, filtering channels by frequency range, sorting groups.
- You want the remote-control web server — Sentinel has no equivalent.
- You want live RR lookups during scanning — Sentinel can pre-load from RR but not lookup live.
Both can coexist on the same PC and program the same radio (though not simultaneously — only one process can hold the USB connection at a time). The codeplug formats are compatible (both manipulate the same Profile.dat); a codeplug edited in ProScan can be read by Sentinel and vice versa.
1.3.5 Cross-links to the per-radio vols
- Vol 13 (SDS100) — Sentinel required for firmware; ProScan recommended for programming.
- Vol 14 (SDS200) — same.
- Vol 15 (BCD536HP) — same.
- Vol 20 (Homepatrol) — Sentinel is the canonical CPS for the Homepatrol family; ProScan doesn’t fully cover Homepatrol-1.
1.4 FreeScan (Uniden CPS alternative)
FreeScan is a free, third-party Windows CPS authored by ARC (Butel) for older Uniden scanners — the pre-DMA architecture lineup that predates Sentinel’s coverage. It’s the practical option for the bench’s legacy Uniden gear (BC246T, BC355N, BC75XLT, BC125AT, and several others) that Sentinel was never written to support.
The historical timeline is the explanation: Uniden scanners before ~2010 used a per-model codeplug architecture, with each model exposing a slightly different programming protocol over serial or USB. Uniden’s own software for those scanners (PSREdit, ARC-Lite, various OEM-branded utilities from different importers) was scattered, inconsistent, and abandoned model-by-model. FreeScan emerged as the community’s consolidation — one Windows app that talks to most of the older Uniden lineup over the original serial/USB programming cables, with a consistent UI and import/export from common formats (CSV, RR exports).
1.4.1 What FreeScan covers
The supported model list is long but it’s all older, all analog-or-early-digital, all conventional-or-Trunk-Tracker-III:
- BC246T (Vol 17) — the Trunk Tracker III handheld that’s on the bench in archival posture.
- BC355N — vehicle-mount compact analog scanner.
- BC75XLT — pocketable analog scanner, no trunking.
- BC125AT — desktop analog with weather.
- BCD396XT — the bridge case. ProScan, Sentinel, AND FreeScan all support this radio; FreeScan is the lowest-friction option if all you need is basic channel entry.
- Various BC340/BC350/BC355 analog desktop variants.
It does NOT support the modern DMA architecture (SDS100/SDS200/BCD536HP/BCD436HP) — those need Sentinel or ProScan.
1.4.2 Why it still exists
The pre-DMA Uniden lineup is over a decade old at this point, and you’d expect the software to have followed the hardware into obsolescence. Three reasons it hasn’t:
- Vintage scanner hobby. A real subculture of operators keeps old analog scanners running specifically because they’re simple, reliable, and don’t require ongoing P25 firmware chase. FreeScan keeps them programmable.
- Cheap-radio market. The BC125AT is still sold new at ~$110 USD (mid-2026) as the “entry analog scanner” — modern manufacturer support for it requires modern software, and FreeScan is what people use.
- Specific feature niches. BC246T’s Trunk Tracker III decode is still useful for legacy Motorola Type II systems that some rural areas still run; for that workload, the radio + FreeScan is a cheap, working solution.
1.4.3 Wine on Linux works
Unlike most Windows-only CPS (Sentinel and AnyTone CPS struggle under Wine due to USB-driver assumptions), FreeScan runs cleanly under Wine on Linux. The Parrot OS partition can program a BC75XLT or BC125AT via the USB serial adapter cable without touching the Windows partition. The cross-link to Parrot OS Vol 11 (Integration with owned hardware) §6 covers the udev rules + Wine prefix configuration for FreeScan; the short version is “install Wine, install the .NET 4.x prerequisites via winetricks, run the FreeScan installer, plug in the cable, FreeScan finds the port.”
This is the only one of the three Uniden CPS tools where the Linux side of the dual-boot is a viable host. For ProScan or Sentinel, boot Windows; for FreeScan, either OS works.
1.4.4 Cross-links to the per-radio vols
- Vol 16 (BCD396XT) — FreeScan is the simplest path for casual programming.
- Vol 17 (BC246T) — FreeScan is the only practical option (Sentinel doesn’t cover, ProScan support is limited).
1.5 Codeplug versioning and backup discipline
This is the cross-cutting practical guidance that applies to every CPS in the landscape. It’s the single most important habit in the entire programming workflow — the discipline that distinguishes “I lost three hours of work because the firmware update bricked the codeplug” from “the firmware update was a non-event; I restored the previous codeplug and was on the air in 60 seconds.”
1.5.1 Always back up BEFORE you edit
The rule with no exceptions: before opening a codeplug for editing, save a copy of the current state with today’s date in the filename. Then edit.
This costs ~10 seconds and zero cognitive load. Skipping it costs hours-to-days when an edit goes wrong and you discover that the radio’s codeplug had a state you can’t reconstruct from memory.
The failure modes that demand this:
- CPS crashes mid-edit, corrupting the file in memory. Saving overwrites the previous file with corruption.
- You mis-edit something subtle (wrong tone on one channel, wrong offset, deleted a zone) and don’t notice until days later. Without a backup from before the edit, you can’t recover.
- The radio firmware updates and invalidates the codeplug schema. The post-update CPS reads the codeplug, “migrates” it (sometimes losing data), and writes it back. The original is gone.
- You hand the radio to someone else to program a feature, they accidentally erase a zone, you discover it next week. Without a backup, you reconstruct from scratch.
The mechanics are trivial:
- ProScan: File → Save Codeplug As → date-stamped name. Or just copy the active
Profile.datfrom the radio’s microSD to the project’sprograms/folder before connecting in ProScan. - Sentinel: same — copy
Profile.datdirectly from the radio’s microSD when connected; that’s the backup. - FreeScan: File → Save As with a new date-stamped name.
- AnyTone CPS: File → Save → name the file with the date.
- CHIRP: File → Save As → name the file with the date. CHIRP saves to
.img(binary, exact radio image) or.csv(human-readable, can be re-imported); save both formats for important codeplugs. - wfView: codeplug-style data isn’t typically saved here (wfView is more of a control surface than a CPS), but VFO memory snapshots can be exported and should follow the same naming convention.
1.5.2 The filename convention
The project-wide convention for codeplug backups:
{slug}-codeplug-YYYY-MM-DD-{descriptor}.{ext}
Where:
{slug}is the radio’s project slug (sds200,d878uvii,vx8dr,bcd536hp, etc. — match the slug used inMY_GEAR/inventory.yaml).YYYY-MM-DDis the ISO date the backup was taken.{descriptor}is a short hint about WHY this backup exists (pre-firmware-update,pre-rr-import,pre-zone-rebuild,last-known-good,field-day-prep, etc.).{ext}is the CPS’s native format (datfor Uniden DMA,rdtfor AnyTone,imgorcsvfor CHIRP).
Examples:
sds200-codeplug-2026-05-24-pre-firmware-update.datd878uvii-codeplug-2026-05-20-after-bm-tg-import.rdtvx8dr-codeplug-2026-05-15-last-known-good.imgf8hp-codeplug-2026-04-30-field-day-prep.csv
The descriptor matters more than you’d expect — six months later when you’re looking through the programs/ folder for “the codeplug from before I rebuilt the zones,” the descriptor tells you which one to restore.
1.5.3 Test new codeplugs in a sandbox zone before promoting
When making a substantive codeplug change (new zone, new scan list, mass talkgroup import):
- Build the new content in a sandbox zone named something like
_SANDBOXor_TEST(the underscore prefix sorts it to the top or bottom of the zone list on the radio). - Write to the radio, navigate to the sandbox zone, test it — keyup, scan, verify the talkgroups decode, verify the alpha tags display correctly.
- If it works, promote to a permanent zone with its real name and remove the sandbox.
- If it doesn’t work, edit further or restore the previous codeplug.
This pattern matters most for DMR codeplugs where a misbuilt zone can be subtle (wrong color code, wrong time slot, wrong contact reference) and only manifests when you actually key up. Testing in a sandbox zone first means a failed test costs you 15 minutes; testing in a permanent zone that you’ve already merged into your main rotation costs you an hour-plus to unwind.
1.5.4 Maintain a “last known good” alongside the working copy
Every radio should have one specific backup file labeled last-known-good — the most recent codeplug that’s been confirmed working in actual field use (not just confirmed-writes-cleanly-to-the-radio, but confirmed-keyup-and-traffic-and-scan-and-alpha-tags-all-correct).
When something breaks, restore last-known-good. When last-known-good is verified after a substantial codeplug update, rename the previous last-known-good to last-known-good-PREVIOUS-{date} (keep two generations back) and promote the new one.
This is a single labeled file per radio in the programs/{slug}/ folder. It’s the recovery anchor.
1.5.5 Re-test after firmware updates
Every CPS in the landscape (except wfView, which doesn’t do firmware) ships firmware updates periodically. Always assume a firmware update can invalidate an older codeplug schema.
The discipline around firmware updates:
- Backup the codeplug first —
{slug}-codeplug-YYYY-MM-DD-pre-firmware-update.{ext}. - Note the current firmware version before updating, in case rollback is needed.
- Run the firmware update through Sentinel (Uniden) or AnyTone CPS or the radio’s native firmware-update method.
- Re-test the codeplug after the update — open in the CPS, verify all zones still exist, verify a representative channel keys up correctly, verify scan still scans.
- If something’s broken, restore the pre-firmware codeplug and consider whether to roll back the firmware.
- If everything works, promote the restored codeplug to the new
last-known-good.
The single highest-risk operation in the entire programming workflow is a firmware update on a radio with a complex codeplug (the AnyTone D878 specifically). The pre-firmware backup is the only insurance.
1.5.6 Store backups in programs/{slug}/
The project convention: each radio’s CPS files and codeplug backups live in programs/{slug}/. The slug matches the radio’s slug in MY_GEAR/inventory.yaml and matches the per-radio volume’s slug:
programs/
├── proscan/
│ ├── ProScan-24.0-installer.exe
│ ├── ProScan-24.4-installer.exe
│ └── license.txt
├── uniden-misc/
│ └── Sentinel.zip
├── sds100/
│ ├── sds100-codeplug-2026-05-24-pre-firmware-update.dat
│ ├── sds100-codeplug-2026-05-15-last-known-good.dat
│ └── sds100-codeplug-2026-04-12-after-county-update.dat
├── sds200/
│ └── (same pattern)
├── d878uvii/
│ ├── d878uvii-codeplug-2026-05-20-after-bm-import.rdt
│ ├── d878uvii-codeplug-2026-05-15-last-known-good.rdt
│ └── radioid-database-2026-05-20.csv
├── vx8dr/
│ └── (same pattern)
├── f8hp/
│ └── (same pattern)
└── (etc.)
This puts every radio’s programming history in one predictable place, surfaced under programs/, alphabetized for navigability, and discoverable by any contributor (or the operator six months later) without explanation.
The CPS installers themselves (ProScan, FreeScan, AnyTone CPS, wfView, CHIRP) also live in programs/ — under their own slug folders (proscan/, freescan/, anytone-cps/, wfview/, chirp/). When a new CPS version is released, archive it alongside the previous version with the version number in the filename, the same way ProScan 24.0 and 24.4 are kept side-by-side.
1.5.7 Versioning across multiple radios
When the same codeplug data (a list of frequencies, a set of CTCSS tones) feeds multiple radios via CHIRP, the source-of-truth is the CHIRP .csv export — the human-readable spreadsheet version of the channel list. Edit the CSV (in Excel, LibreOffice, or any spreadsheet), re-import into CHIRP, write to each radio in turn.
The CSV becomes the canonical “channels I care about” file, with each radio’s .img file being a derived artifact. The discipline: edit the CSV, not the .img. The CSV is human-readable, diffable, mergeable; the .img is binary and opaque.
For the bench, the CSV that feeds the Baofeng F8HP, the UV-B5, and the VX-8DR (for the channels each one supports) is the load-bearing artifact. The per-radio .img files are recreated from the CSV via CHIRP whenever the channel set changes.
1.5.8 The “I bricked my radio” recovery path
The worst case: a CPS write went wrong, the radio is unresponsive, or the firmware update failed mid-flash.
- Uniden DMA scanners (SDS100/SDS200/BCD536HP): there’s a hardware recovery mode (the radio’s bootloader will accept a firmware re-write even if the application firmware is corrupt). Cross-link to the per-radio volumes’ §7 (Tips & tricks) for the model-specific recovery key combo. The codeplug recovery is separate — even if the firmware is fine, a corrupt
Profile.datcan be restored by mounting the microSD in a PC and copying a backup over. - AnyTone D878: hardware recovery mode (hold PTT + side key + power-on, plug in CPS cable, write a fresh firmware). The CPS will then ask for a codeplug write; restore the last
last-known-good. - Baofeng UV-5R/F8HP/UV-B5: no real bricking risk — even a corrupted codeplug doesn’t disable the radio, just blanks the channels. Re-write via CHIRP with a backup.
- Yaesu VX-8DR: factory reset (hold MON+POWER on power-up) returns the radio to defaults; re-write the codeplug via CHIRP.
For every radio, the recovery anchor is the last-known-good codeplug backup. If you don’t have it, recovery is “reconstruct from RadioReference + memory + frustration.”
1.6 Resources
1.6.1 Programming software — official sites
- ProScan (Bill Davis, W6BD; paid, Windows): https://www.proscan.org
- Sentinel (Uniden; free, Windows): bundled with Uniden DMA scanners; updates at https://www.uniden.com
- FreeScan (ARC/Butel; free, Windows + Wine): https://www.freescan.eu
- AnyTone CPS (vendor; free, Windows): US distribution via https://www.bridgecomsystems.com
- wfView (open source; free, Win/Mac/Linux): https://wfview.org
- CHIRP (open source; free, Win/Mac/Linux): https://chirpmyradio.com
1.6.2 Third-party AnyTone tooling
- CPSProgrammer (open source): community-maintained; search GitHub for current canonical repo
- AnyTone-Sync (Python): community tooling for periodic RadioID + BrandMeister refresh
- DCS-CodePlugMaster (Windows): bulk talkgroup management
1.6.3 Yaesu paid alternative
- RT Systems (Windows, paid per-radio): https://www.rtsystemsinc.com
1.6.4 Data sources — what goes IN to the codeplugs
- RadioReference (North American frequency database — the canonical source-of-truth for scanner programming; paid subscription ~$30/year for Premium): https://www.radioreference.com
- RadioID.net (DMR user-ID directory): https://radioid.net
- BrandMeister (talkgroup rosters): https://brandmeister.network
- TGIF Network (talkgroup rosters): https://tgif.network
- RepeaterBook (repeater frequencies, worldwide): https://repeaterbook.com
1.6.5 Per-radio cross-links (every per-radio vol’s §4 cross-links here)
- Vol 5 (Yaesu VX-8DR) — CHIRP
- Vol 6 (Baofeng F8HP) — CHIRP
- Vol 7 (Baofeng UV-B5) — CHIRP
- Vol 8 (AnyTone D878UVII) — AnyTone CPS
- Vol 9 (Xiegu X6100) — Xiegu utility (not in this volume’s scope; FLrig also works)
- Vol 13 (SDS100) — ProScan + Sentinel
- Vol 14 (SDS200) — ProScan + Sentinel
- Vol 15 (BCD536HP) — ProScan + Sentinel
- Vol 16 (BCD396XT) — FreeScan + ProScan
- Vol 17 (BC246T) — FreeScan
- Vol 20 (Homepatrol) — Sentinel
- Vol 22 (DIY WPSD Hotspot) — browser-based dashboard (not in this volume’s scope)
1.6.6 Sibling synthesis vols
- Vol 1 (Overview) §7 — preview of the programming-software landscape table
- Vol 2 (DMR Network Architecture) — the network-side context for AnyTone CPS DMR programming
- Vol 4 (Frequency Planning & License Envelope) — the per-band frequency assignments that feed codeplugs across CPS tools
- Vol 25 (Cheatsheet & closeout) — laminate-ready programming-cable pinout reference and CPS-tool quick-pick card
1.6.7 Cross-deep-dive references
- Hack Tools/Parrot OS Vol 3 (Dual-boot architecture) — the dual-boot rationale for hosting Windows-only CPS on a Linux-primary laptop
- Hack Tools/Parrot OS Vol 11 (Integration with owned hardware) §6 — udev rules + Wine prefix configuration for FreeScan + CHIRP on Linux
- Hack Tools/Quansheng UV-K5 — sibling tool deep dive; CHIRP supports the UV-K5 variants