Scanners & Radios · Volume 21
Programming Software Landscape
ProScan, FreeScan, Sentinel, wfView, CHIRP, vendor CPS — what runs what, on which platform
Contents
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 Jeff has 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 for Jeff: 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:
| 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 20 (DMR Network) covers the talkgroup-and-contact data that AnyTone CPS imports (RadioID CSVs, BrandMeister rosters); Vol 22 (Frequency Planning) covers the per-band frequency assignments that get poured into codeplugs across CHIRP and ProScan.
2. ProScan (Uniden CPS for SDS100/SDS200/BCD536HP/BCD396XT) {#proscan-uniden-cps}
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. Jeff’s license + installer + the two archived versions (24.0, 24.4) are in programs/proscan/.
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.
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).
Jeff’s posture: 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).
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 10 (SDS100) §4 and Vol 11 (SDS200) §4. The RR subscription itself is at https://www.radioreference.com/apps/content/?cid=2.
2.4 Pricing model — lifetime license, periodic upgrades
ProScan is ~$50 USD lifetime license as of mid-2026 (TBD — verify with Jeff at next purchase decision; 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.
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 Jeff has been 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.
Jeff’s 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.
2.6 Cross-links to the per-radio vols
- Vol 10 (SDS100) — handheld P25 flagship; ProScan is the recommended CPS for serious programming.
- Vol 11 (SDS200) — base/mobile P25 flagship; ProScan is the daily driver for the shack’s primary scanner.
- Vol 12 (BCD536HP) — base/mobile mid-tier; ProScan supports it fully.
- Vol 13 (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.
3. Sentinel (Uniden CPS for BCDx36HP family) {#sentinel-uniden-cps}
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).
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.
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.
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.
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.
3.5 Cross-links to the per-radio vols
- Vol 10 (SDS100) — Sentinel required for firmware; ProScan recommended for programming.
- Vol 11 (SDS200) — same.
- Vol 12 (BCD536HP) — same.
- Vol 17 (Homepatrol) — Sentinel is the canonical CPS for the Homepatrol family; ProScan doesn’t fully cover Homepatrol-1.
4. FreeScan (Uniden CPS alternative) {#freescan}
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).
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 14) — 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.
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.
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. Jeff’s 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.
4.4 Cross-links to the per-radio vols
- Vol 13 (BCD396XT) — FreeScan is the simplest path for casual programming.
- Vol 14 (BC246T) — FreeScan is the only practical option (Sentinel doesn’t cover, ProScan support is limited).
5. AnyTone CPS (D878UVII) {#anytone-cps}
AnyTone CPS is the vendor’s first-party Windows programming utility for the AT-D878UVII PLUS (and the broader D868/D878 family). It’s free, Windows-only, and required for any meaningful programming on the radio — DMR codeplug structure on the D878 is genuinely too complex for a generic tool like CHIRP to handle, which is why no cross-vendor option exists.
5.1 The codeplug schema — why DMR is hard
A DMR codeplug isn’t just a list of frequencies. It’s a layered set of data structures with cross-references:
- Channels — the lowest layer. Each channel has a frequency, mode (analog/DMR), CTCSS/DCS (analog) or color code + time slot (DMR), TX power, and a reference into a Contact OR a Receive Group.
- Contacts — DMR talkgroups, by name and ID. Tens of thousands of these exist (every BrandMeister talkgroup, every TGIF talkgroup, every local club’s private group). A typical codeplug has 50-300 of them loaded.
- Receive Groups — sets of contacts (e.g., “all Michigan talkgroups”, “all worldwide-English”) that listen on a single channel; for monitoring multiple talkgroups in time-slotted DMR.
- Scan Lists — sets of channels for the radio to scan. Each scan list has priority channels, dwell time, look-back behavior.
- Zones — sets of channels for one-touch selection on the front panel. A “Home Repeaters” zone, a “Travel — Detroit” zone, a “VHF Simplex” zone.
- Roaming Zones — sets of channels for automatic site selection in multi-site DMR systems; the radio listens to all channels in a roaming zone for the strongest control signal and automatically registers there.
- DMR Contacts Database (DCDB) — the per-user DMR ID directory imported from https://radioid.net. When a DMR transmission decodes a user ID, the radio looks it up in the DCDB and displays “John KD8XYZ” instead of “2347001”. This database has ~250,000+ entries as of mid-2026 and consumes a chunk of the radio’s flash.
All of these interlink. A channel references a contact; a scan list references channels; a zone references channels; the DCDB is independent but loaded into the same codeplug. Edit any one and the cross-references must remain valid. The AnyTone CPS UI presents these as separate spreadsheet-like grids with click-through navigation between them.
CHIRP cannot handle this. CHIRP’s data model is fundamentally “list of channels with frequency + CTCSS”; the DMR scaffold doesn’t fit. This is why every DMR vendor maintains their own CPS and why CHIRP-for-DMR has never materialized despite occasional community attempts.
5.2 The proprietary programming cable
The D878UVII uses a USB-C-to-K2-pin programming cable that’s specific to AnyTone (and the broader Hytera/QYT K2-pin family). The “K2” refers to the dual-pin connector on the radio side — a proprietary AnyTone connector that looks vaguely like a Kenwood K-plug but is electrically different.
Use the AnyTone-supplied or AnyTone-clone cable. The CH340/CP2102 serial chip in the cable is identified by the CPS during connect; some third-party “compatible” cables don’t enumerate correctly and the CPS won’t see the radio. The Bridgecom-sold cable (~$25-30) is the safe option; the eBay $8 clones are 50/50 at best.
USB driver discipline: the cable presents as a USB-to-serial bridge (typically Silicon Labs CP2102 or WCH CH340G). Windows finds drivers automatically in current versions; in some Win 11 cases the CP2102 driver needs to be installed manually from Silicon Labs’s site. The COM port number assigned at first connect should be remembered — the AnyTone CPS auto-detects but if multiple USB-serial devices are plugged in, the auto-detect can pick the wrong one.
5.3 Codeplug import and export — the data dance
The data that goes INTO a D878 codeplug rarely originates in the AnyTone CPS UI. The realistic workflow:
- Pull a DMR ID CSV from https://radioid.net. This is the 250k-entry per-user directory.
- Pull a BrandMeister talkgroup list (CSV) from a community-curated source — N1RCN’s lists, BrandMeister’s own exports, or a local-club roster. These become the Contacts list.
- Pull repeater/hotspot frequencies from RepeaterBook (https://repeaterbook.com) for the geographic area of interest. These become the analog/DMR channel entries.
- Build the Zones by hand in the CPS — group channels into the front-panel zones that match your operating posture.
- Build the Scan Lists by hand — pick channels per scan list, set priority channels, set dwell times.
- Build the Roaming Zones if using multi-site DMR — set the channels in each roaming zone, set the threshold for auto-switch.
- Write to the radio.
Steps 1-3 are CSV imports through the CPS’s Import functions; step 4-6 are interactive UI work. A first codeplug from scratch is ~4-6 hours of work; updates to an established codeplug are minutes.
5.4 Third-party alternatives
The AnyTone CPS UI has rough edges (Windows-only, Chinese-translated, occasional crashes on large codeplugs). Several third-party tools improve the experience:
- CPSProgrammer — open-source codeplug editor that reads/writes AnyTone codeplug files, with a cleaner UI and scriptable batch operations. Cross-platform via Qt.
- AnyTone-Sync — Python tool that pulls fresh RadioID and BrandMeister data on a schedule and rebuilds the codeplug; useful for keeping the DCDB current without manual re-imports.
- DCS-CodePlugMaster — Windows tool that focuses on bulk talkgroup management and zone organization; integrates with multiple DMR vendors’ codeplug formats.
None of these REPLACE the AnyTone CPS for the final write-to-radio step — only AnyTone CPS has the official write protocol implementation that won’t brick the radio. They generate codeplug files that AnyTone CPS then loads and writes. The workflow becomes: edit in the third-party tool, save codeplug file, open in AnyTone CPS, write to radio.
5.5 Cross-links
- Vol 5 (AnyTone D878UVII) — the radio’s own volume covers the field-operating workflow.
- Vol 20 (DMR Network) — the network-side architecture that the codeplug points at.
- Vol 19 (DIY WPSD Hotspot) — the WPSD hotspot’s user-ID lookup tables match what the D878 uses from radioid.net.
6. wfView (Icom radio control) {#wfview}
wfView is the free, open-source, cross-platform PC client for Icom HF/VHF/UHF transceivers — IC-7300, IC-9700, IC-705, IC-7610, and the IC-7100. It’s the modern open-source alternative to Icom’s own RS-BA1 commercial software, runs on Windows, Mac, and Linux, and is licensed GPL. It’s archived in programs/wfview/ despite the fact that Jeff currently owns no Icom radios — the archive is forward-looking for the eventual addition of an IC-7300 or IC-705 to the lineup.
6.1 What it is
wfView is a CAT-control + spectrum-scope + audio-routing front end for Icom radios. It connects to an Icom radio over:
- USB (Icom radios with built-in USB sound + CAT — IC-7300, IC-705, IC-9700) — single cable carries both CAT control and audio.
- CI-V serial (Icom’s CI-V bus, the historical Icom remote-control protocol) — for older Icom radios with a 3.5mm CI-V jack plus a separate audio path.
- TCP/UDP network (using wfView’s own server running on a Pi/PC connected to the radio) — for remote operation over LAN or internet.
Once connected, wfView presents the radio’s full operator interface on screen: VFO knob (mouse scroll), band-stacking memory, all the menus accessible via clickable controls, the radio’s panadapter display rendered as a configurable spectrum + waterfall (the IC-7300/IC-9700/IC-705/IC-7610 all have built-in spectrum scopes that wfView reads at higher resolution than the radio’s own screen), audio I/O routed to/from the PC’s sound system for digital-mode integration (FT8, WSJT-X, JS8, FLDIGI).
6.2 Why it’s archived “no current radio uses this”
Jeff’s bench has the Xiegu X6100 as the current HF radio. wfView does NOT support the X6100 — Xiegu has its own CAT protocol that’s Icom-CI-V-compatible-ish but with quirks that wfView’s Icom-specific implementation doesn’t handle cleanly. (The X6100’s CAT control is best handled via Xiegu’s own utility or via FLrig configured for X6100; cross-link to Vol 6 (Xiegu X6100) §4.)
The Icom IC-705 is on the long-term acquisition wishlist — same QRP HF/VHF/UHF posture as the X6100 but with Icom’s more refined CAT control, better spectrum scope, and the entire Icom-software-ecosystem maturity. If/when the IC-705 lands on the bench, wfView is the front-end of choice and the archived install will save a download. The cross-link is Vol 1 §11 (Aspirational/Future radios).
The IC-7300 is the other long-term aspirational acquisition — the desktop HF that would complement the X6100 portable. Same wfView story: archived now, deployed if/when the radio arrives.
6.3 Why archive software you don’t have a radio for
The discipline: archive the version of the software that was the most-recommended-stable release at the time of decision, not whatever’s current when you eventually buy the radio. wfView’s development moves fast — major releases yearly, with occasional protocol-breaking changes when Icom updates a radio’s firmware. The version you’d install today (mid-2026: wfView 2.0x — TBD verify exact version with Jeff) is known-good with current IC-7300/IC-705/IC-9700 firmware. The version that exists when Jeff eventually buys the radio in 2027 or 2028 might or might not be compatible with the radio’s then-current firmware.
Having the archived “known-good” installer means a clean rollback path if the future wfView version has issues. Same discipline as the ProScan v24.0/v24.4 dual archive (§2.5) and as the firmware-version archiving discipline in general — keep one or two versions back from current.
6.4 Cross-platform notes
wfView builds natively on Linux (Qt-based), and the Linux build is in some respects more polished than the Windows build (smoother audio routing via PipeWire/PulseAudio; native ALSA support for radios that present USB-audio directly). On Mac (Intel and Apple Silicon), wfView runs cleanly via the official .dmg.
For Jeff’s eventual workflow: the Parrot Linux partition can host wfView for Icom radio control, leaving the Windows partition free for the Uniden+AnyTone CPS tools. The cross-link is to Parrot OS Vol 11 §6 (Integration with owned hardware) for the udev-rules pattern that gives non-root user access to USB-CAT devices.
6.5 Resources
- wfView official: https://wfview.org
- Source code: https://gitlab.com/eliggett/wfview
- The wfView Discord community is the support channel of record.
7. CHIRP (universal — Baofeng, Yaesu, others) {#chirp}
CHIRP is the universal cross-vendor open-source CPS — the closest the radio world has to a “one tool to program them all” for the budget HT segment. It supports hundreds of radio models from Baofeng, Yaesu, Kenwood, Wouxun, BTECH, Anytone (the analog-only Anytones, not the DMR D868/D878), Quansheng, TYT, and dozens more. Free, cross-platform (Python/wxWidgets — runs on Windows, Mac, and Linux), GPL-licensed, maintained by the CHIRP project at https://chirpmyradio.com.
For the bench’s purposes, CHIRP is the CPS for the Yaesu VX-8DR, the Baofeng F8HP, and the Baofeng UV-B5. Three radios, one tool, one shared codeplug paradigm — this is the productivity multiplier CHIRP delivers.
7.1 The CHIRP model
CHIRP’s central abstraction is the memory channel. Each memory has a frequency, an alpha tag (display name), a tone (CTCSS encode/decode, DCS), an offset (simplex/duplex), a TX power, a width (narrow/wide FM), and a few minor attributes (skip in scan, mode if non-FM). The same memory structure represents a channel on a Baofeng, a Yaesu, or a Wouxun — CHIRP normalizes the differences.
This means: you can build a codeplug ONCE in CHIRP and write it to any supported radio. Build a “local repeaters” channel set, save to a .img or .csv file, write to the Baofeng F8HP, write to the Yaesu VX-8DR, write to a friend’s UV-5R. Same channels, same alpha tags, three different radios, ten minutes of work for the second and third radios after the first.
The per-radio differences (some radios have more memories, some have different attribute support — FM broadcast band, VFO B independence, scan groups, banks) are handled by per-radio driver modules. The same channel data writes to each radio with appropriate truncation/expansion of optional fields.
7.2 The driver-per-radio architecture
CHIRP supports a radio when someone in the community has written a driver for it. Driver maturity varies wildly:
- Mature, gold-standard drivers: Baofeng UV-5R, F8HP, BF-F8HP, BF-888, GT-3, GT-5R; Wouxun KG-UVD1P; Yaesu VX-8DR, FT-60R, FT-7800/8800/8900. These have years of community refinement, reliably read/write codeplugs, handle the radio’s edge cases.
- Solid but slightly newer: Baofeng UV-B5, UV-B6; BTECH UV-25X4, UV-50X3; many Quansheng UV-K5 variants (relevant cross-link to Hack Tools/Quansheng UV-K5).
- Beta/experimental: New radios that landed in CHIRP within the last 6-12 months; usually work but may have rough edges (specific tone modes missing, attribute fields untested).
- Not supported: Anything DMR (AnyTone D878, all the TYT MD-series, Connect Systems CS800), Uniden scanners (any model), Icom HF (any model — that’s wfView’s territory), the M17 digital radios.
For the bench: the Yaesu VX-8DR has a fully mature driver (CHIRP has had VX-8 support for over a decade); the Baofeng F8HP uses the same driver family as the UV-5R (the F8HP is electrically a UV-5R with an 8W PA), and the UV-5R driver is the most-used CHIRP driver in existence; the UV-B5 has a separate driver that’s been stable for years.
7.3 The build cadence
CHIRP releases on a rolling basis — there’s a “stable” release roughly twice a year (e.g., CHIRP next-20240725, CHIRP-next-20251215; TBD verify current release date) and a “next” build that updates weekly with new drivers and bug fixes. The recommended practice is the next build for any new install — it has the most current drivers and is generally as stable as the stable release.
Install via:
- Windows: download the installer from chirpmyradio.com and run; .NET prerequisites bundled.
- Mac: download the .dmg.
- Linux: package available via pip (
pip install chirp), via Flatpak, or distro packages.
Jeff’s Parrot OS partition runs CHIRP cleanly via Flatpak (or pip-installed into a venv); the cross-link is Parrot OS Vol 11 §6 for the udev rules that give the user access to the USB programming cable without root.
7.4 The programming cable problem
Each radio has its own programming cable. CHIRP doesn’t ship cables; you supply them. The relevant cables for the bench:
- Baofeng UV-5R/F8HP — Kenwood K1-style 2-pin (2.5mm + 3.5mm coaxial plugs). Several variants: original Baofeng “BF-9700” cable (
$5, sometimes works, often doesn’t due to fake FTDI chips bricking themselves under Windows driver updates); the Valley Enterprises FTDI Genuine cable ($25, the safe choice); the BTECH Baofeng cable (FTDI-based, $20-25). - Yaesu VX-8DR — CT-167 cable (manufacturer Yaesu) or aftermarket equivalents. The CT-167 is overpriced ($60+); aftermarket versions are ~$20.
- Baofeng UV-B5 — same K1-style 2-pin as the UV-5R; same cable works.
The single most painful CHIRP failure mode is fake FTDI cables that work until Windows updates the FTDI driver, then the cable bricks itself. The legitimate FTDI driver since ~2014 has shipped with a “kill counterfeit” feature that detects fake FTDI silicon and reprograms the USB-VID to 0x0000, rendering the cable unusable. The Valley Enterprises Genuine FTDI cable is the safe purchase; the no-brand $5 cables are a coin flip.
On Linux, the FTDI kill behavior doesn’t happen — the driver is open-source and doesn’t include the counterfeit-detection. A Baofeng programming cable that doesn’t work on Windows often works fine on Linux; this is a use case for the Parrot partition.
7.5 The limitations
What CHIRP can’t do:
- AnyTone D878 (or any DMR radio). The DMR codeplug structure (§5.1) is too complex; no DMR driver has been written and the project has effectively decided not to pursue it. Use the AnyTone CPS.
- Uniden scanners. No support, by design — Uniden’s DMA architecture is unrelated to CHIRP’s memory model. Use Sentinel, ProScan, or FreeScan.
- Icom HF transceivers. Use wfView.
- Most modern digital-mode radios (Yaesu System Fusion C4FM HTs like the FT-1DR/FT-2DR/FT-3DR/FT-5DR — those have D-STAR-and-Fusion codeplug structures that CHIRP partially supports but not as cleanly as Yaesu’s RT Systems software).
7.6 RT Systems as a paid alternative
For Yaesu radios specifically, RT Systems sells a per-radio paid CPS (~$25-40 per radio) that some operators prefer over CHIRP — cleaner Yaesu-specific UI, support for some attributes that CHIRP doesn’t expose (DSP filter presets, GPS waypoint memory on the VX-8 series). RT Systems is Windows-only.
The trade-off: CHIRP is free and covers many radios with one install; RT Systems costs per-radio but has more polished per-radio UX. For most operators, CHIRP is sufficient. For the operator who programs the VX-8DR weekly and uses every Yaesu-specific feature, RT Systems might be worth it. Jeff’s posture: CHIRP is enough for the current bench; no RT Systems license held.
7.7 Cross-links to the per-radio vols
- Vol 2 (Yaesu VX-8DR) — CHIRP is the primary CPS; mature driver.
- Vol 3 (Baofeng F8HP) — CHIRP is the only practical CPS; gold-standard driver.
- Vol 4 (Baofeng UV-B5) — CHIRP is the only practical CPS; mature driver.
8. Codeplug versioning and backup discipline {#codeplug-versioning}
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.”
8.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.
8.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.
8.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.
8.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.
8.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.
8.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 by Jeff 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.
8.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.
8.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.”
9. Resources
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
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
Yaesu paid alternative
- RT Systems (Windows, paid per-radio): https://www.rtsystemsinc.com
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
Per-radio cross-links (every per-radio vol’s §4 cross-links here)
- Vol 2 (Yaesu VX-8DR) — CHIRP
- Vol 3 (Baofeng F8HP) — CHIRP
- Vol 4 (Baofeng UV-B5) — CHIRP
- Vol 5 (AnyTone D878UVII) — AnyTone CPS
- Vol 6 (Xiegu X6100) — Xiegu utility (not in this volume’s scope; FLrig also works)
- Vol 10 (SDS100) — ProScan + Sentinel
- Vol 11 (SDS200) — ProScan + Sentinel
- Vol 12 (BCD536HP) — ProScan + Sentinel
- Vol 13 (BCD396XT) — FreeScan + ProScan
- Vol 14 (BC246T) — FreeScan
- Vol 17 (Homepatrol) — Sentinel
- Vol 19 (DIY WPSD Hotspot) — browser-based dashboard (not in this volume’s scope)
Sibling synthesis vols
- Vol 1 (Overview) §7 — preview of the programming-software landscape table
- Vol 20 (DMR Network Architecture) — the network-side context for AnyTone CPS DMR programming
- Vol 22 (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
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