Scanners & Radios · Volume 5
AnyTone AT-D878UVII PLUS
Top-tier DMR handheld with dual-receive, Bluetooth, APRS, AES encryption
Contents
| Section | Topic |
|---|---|
| 1 | About this volume |
| 2 | Hardware tour |
| 3 | Operating modes |
| 4 | Programming workflow |
| 5 | Codeplug backups |
| 6 | Field use |
| 7 | Tips and tricks |
| 8 | Resources |
1. About this volume
The AnyTone AT-D878UVII PLUS is the current-flagship dual-band DMR Tier I/II handheld in the BridgeCom / AnyTone US distribution channel, and it is Jeff’s DMR daily-driver — the HT that gets keyed up first when the answer to “I want to talk on DMR” comes up. The hardware comes out of Qixiang Electronics in Quanzhou (Fujian), trading as AnyTone Tech; the US distribution path is BridgeCom Systems out of Kansas, who handle firmware bundling, the AT_Options expansion, US-localised manuals, the warranty, and the bulk of the codeplug-sharing community that grew up around this radio. Most US 878 owners bought through BridgeCom or one of their downstream amateur dealers (HRO, GigaParts, R&L). The handful of grey-market units coming in directly from China have firmware regional codes that the BridgeCom CPS will refuse to write to, which is the first warning sign for a too-cheap eBay listing.
The “II PLUS” generation slots between roughly 2021 and 2023 and brought four meaningful improvements over the original 2018-era D878UV non-PLUS: integrated Bluetooth (HSP/HFP for an external PTT button or a Bluetooth headset, the killer feature for in-vehicle DMR operation); an improved analog audio chain and a re-tuned AMBE+2 vocoder profile that takes some of the buzz out of fringe-signal DMR; AT_Options-enabled AES-256 encryption (export-controlled but available to US amateurs from BridgeCom, with the regulatory caveat covered in §3 and §7); and a slightly faster CPU that handles the 200k-contact database lookups without the sluggish display refresh of the earlier generation. There is also a “II PLUS” with a separate hardware revision letter — the 2023+ build with the BL_v2 bootloader that requires the V4.xx firmware family. The pre-BL_v2 II PLUS units max out at firmware V3.04; the BL_v2 II PLUS units run V4.xx (current as of mid-2026: V4.00 release 250815, packaged in the “D878UVII V4.00” bundle from BridgeCom). Firmware version is sticky to bootloader; do not try to cross-flash, the radio will brick and BridgeCom warranty service is the only recovery path.
Why someone picks this over the other dual-band hams on the bench is a fork that runs through the rest of this series. Against the Baofeng F8HP (Vol 3) or the Yaesu VX-8DR (Vol 2) the AnyTone is the only radio that does mature DMR Tier II — the Baofengs are analog-only, and the Yaesu does Yaesu’s own YSF (Fusion) digital mode rather than DMR, so they sit on different network ecosystems entirely. Against the cheap Chinese DMR HTs (TYT MD-380/UV380, Retevis RT3S/RT84, the Radioddity GD-77 / Anytone D578 mobile cousin) the 878 has measurably better receive audio, a much more disciplined CPS that doesn’t corrupt codeplugs on partial writes, an integrated GPS and a real internal TNC, Bluetooth that actually works, and BridgeCom’s US support apparatus. Against the older non-PLUS D878 the case for the II PLUS is the Bluetooth + AES + better audio, which are the three things Jeff actually uses. The 878 is not the budget choice (BridgeCom price mid-2026 is around USD 280-320 for the radio + standard battery, USD 350-400 with the AT_Options bundle), but for a DMR-first amateur operating across a hotspot, a couple of local repeaters, and the wider BrandMeister talkgroup space, it is the right choice in the lineup.
Cross-link discipline: the 878 talks to a DMR network — see Vol 20 (DMR Network Architecture) for what’s actually on the other end of the link. It typically talks to that network through a hotspot rather than direct to a repeater — see Vol 19 (DIY WPSD Hotspot) for Jeff’s primary hotspot and Vol 18 (SkyBridge Plus) for the commercial sibling. The programming software lives in Vol 21 (Programming Software Landscape). The encryption / digital-mode regulatory framing is in Vol 22 (Frequency Planning & License Envelope) and the deeper Part 97.113 treatment in [Antennas Vol 31 (Regulatory & RF Safety)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol31.md). Antenna pairing is in [Antennas Vol 29 (Use-case Matrix)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol29.md).
2. Hardware tour
Physically the 878 II PLUS is a 130 × 65 × 39 mm brick, ~280 g with the standard QB-44L 3100 mAh Li-ion battery installed (closer to ~250 g with the smaller QB-44 2100 mAh). The chassis is glass-filled ABS over a die-cast metal frame, finish is a matte black slightly rougher than the original 878’s smoother finish — gives noticeably better grip with damp or gloved hands. Drop-resistant from typical belt height but not IP-rated; the original spec sheet claims IP54 but BridgeCom doesn’t market it as such, and the speaker grille is unsealed enough that immersion is a unit-killer. Compared with the Yaesu VX-8DR’s genuine IPX7 the 878 is the desk/vehicle/belt radio, not the kayak radio.
Front face top to bottom: the 2.4″ color TFT (240 × 320, transflective, daylight-readable with the backlight at default — the colour scheme is user-configurable in CPS and is one of the small joys of the radio, the standard “blue background with white text” being the default but a “black on amber” night-vision mode also exists). Below the display sits the 4-way navigation cluster around an OK button, a numeric keypad (0-9, *, #), and three function keys (P1, P2, P3 — programmable to over forty distinct actions, see §7). The keypad backlight matches the display; brightness and timeout are both CPS-configurable.
Top edge carries three controls plus the GPS-status LED. The leftmost knob is the on/off + volume rotary (push-click for power, continuous-rotation for volume, no detents); the centre knob is the channel/VFO selector with detents; the rightmost rotary is the squelch (analog mode) / volume-fine-trim (digital mode) — labelled as “VFO B” in the manual but it serves the squelch function on the active VFO. The GPS indicator is a small surface-mount LED that goes from red (no fix) through amber (cold/warm fix in progress) to green (locked); it sits next to the SMA antenna jack. The SMA jack itself is SMA-female (centre socket on the radio), which is AnyTone’s reverse-Baofeng convention — antennas with SMA-male centre pins screw directly in. This matters because the bulk of the cheap aftermarket dual-band whip ecosystem (Nagoya, Diamond, Smiley) ships in both SMA-male and SMA-female centre-pin variants, and the 878 wants the SMA-male centre-pin antenna. Get the wrong one and you need an SMA-M-to-SMA-F adapter that adds ~0.1 dB and another mechanical failure point.
Left side has the PTT button (large, tactile, slight overtravel), a wedge-shaped PA (push-to-monitor) button below the PTT for opening squelch on the active channel, and a SK1/SK2 dual-function side cluster (programmable, default SK1 = “scan toggle”, SK2 = “digital monitor toggle”). PTT throw is around 1.5 mm with a satisfying click; not gloves-with-thick-fingers friendly but workable.
Right side carries the USB-C accessory/programming jack and a side-button (SB) third programmable. The USB-C jack is the standard AnyTone wart: it is not electrically a standard USB-C port, it is the Kenwood K-2-pin protocol broken out onto a USB-C connector for mechanical reasons. A plain USB-C-to-USB-C or USB-C-to-USB-A cable plugged into a host computer will charge the battery slowly off the 5 V bus pins but will not enumerate as anything readable by CPS. You need the AnyTone official programming cable (PC-58 or PC-127 part numbers; BridgeCom sells both, USD 25-35 mid-2026) which is mechanically USB-C on the radio end but contains an FT232-class USB-serial converter routing to the K-2 pins. The “third-party USB-C cable” trap has eaten countless 878 owners’ first programming attempts. There is also an audio-accessory variant of the same cable family with a 3.5 mm TRS / 2.5 mm TRS split out for an external speaker-mic — same K-2 mechanical jack, different end termination.
Back holds the battery (slide-down release latch on the bottom), a programmable side-button under the battery clip nominally for “FM radio toggle” (yes, the 878 has a broadcast-FM receiver, 87.5-108 MHz, separate from the amateur-band receive — useful for ambient awareness in the car), and the contact pads for the QC drop-in charger.
Battery: the standard option is the QB-44L 3100 mAh 7.4 V Li-ion (the “L” suffix for the larger size). The smaller QB-44 2100 mAh ships on some bundles and is mechanically thinner — drops the radio depth from 39 mm to ~31 mm at the cost of about a third of the battery life. Realistic runtime: with the 3100 mAh stock battery, 12-15 hours of typical amateur usage (5% TX / 5% RX / 90% standby on a single talkgroup); 6-8 hours under heavy promiscuous-mode use because the digital decoder stays active across both timeslots; 18-20 hours analog-only standby. Charging via the standard drop-in QC desktop charger (also bundled) takes ~4 hours; charging off the USB-C bus pins is slower (~6-8 hours) and not recommended as the radio doesn’t expose the standard PD negotiation lines.
Antenna: the stock antenna is a stubby ~12 cm helically-wound dual-band whip, branded as the AT-D878UVII stock antenna. It is decent — better than the Baofeng stock whip, on par with the Yaesu stock — but a clear upgrade target. Antenna upgrade recommendations are in §6 and the deep treatment is in [Antennas Vol 9 (Portable & mobile monopoles)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol9.md) with the per-radio matrix at [Antennas Vol 29](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol29.md).
Internal architecture is worth a paragraph because it explains several of the operating quirks. The 878 II PLUS uses an HRC6000-class baseband (the same DMR baseband family as the Connect Systems CS800/CS801D and the original TYT MD-9600), an AMBE+2 vocoder ASIC for DMR voice encode/decode, a separate analog-FM IF chain that shares the same baseband ADC, an L-band uBlox-class GPS module on a side daughter-card, and a Hayes-class CSR8635 Bluetooth radio (HSP/HFP only — no A2DP for stereo audio, so don’t expect to stream FM broadcast over a stereo headset). The CPU is a 32-bit ARM Cortex-M4 class with around 4 MB of program flash and 256 KB of RAM, dwarfed by the 32 MB DMR contact database flash that holds the 200k radioid.net entries — that database flash is the limiting factor for new-codeplug write times, taking ~3 minutes for a full image over the 115200-baud serial link, vs ~20 seconds for the small codeplug portion alone.
3. Operating modes
The 878 is a multi-mode handheld; the catalogue of what it actually does on the air, and how each mode is configured, is below.
DMR Tier II (TDMA, two timeslots) — the primary mode
This is what the 878 is bought for. Tier II is the standard repeater DMR with two 30 ms TDMA timeslots interleaved on a single 12.5 kHz channel — a single repeater transports two simultaneous conversations on different timeslots without interfering. For amateur use, all BrandMeister, TGIF, and W0CHP-PiStar (WPSD) network repeaters and hotspots run Tier II. Per-channel configuration in CPS specifies the channel frequency (RX + TX simplex, or TX with a -5 / +5 MHz offset for a repeater split), the colour code (0-15, the DMR equivalent of analog CTCSS — a layer-1 squelch tone that must match the repeater), the slot (1 or 2 — for a hotspot, almost always slot 2 by community convention; for a repeater, depends on the repeater operator and is published in its repeater directory entry), and one or more associated talkgroups via an RX group list. The AnyTone implementation is mature — co-channel decoding, late-entry handling, and audio quality at the cell-edge are all noticeably better than the budget Chinese DMR HTs and on par with the commercial Motorola / Hytera kit it is competing against.
DMR Tier I (FDMA, simplex DMR) — direct-to-direct
Tier I is simplex DMR between two radios, no repeater involved, no TDMA timeslotting — both radios on the same frequency, same colour code, talking directly. Useful for tactical short-range work where you want the digital audio quality and the digital error-correction of DMR without the infrastructure dependency. The 878 supports Tier I but the talkgroup management is the same as Tier II — you still need a talkgroup ID configured on the channel, even though no network is involved. By DMR convention, TG 99 (Local) is the simplex talkgroup used for Tier I direct-to-direct in most US amateur communities (worth checking against your local repeater coordinator’s guidance — some areas use TG 9 instead).
Analog FM with CTCSS/DCS — the legacy fallback
The 878 is a perfectly competent analog FM handheld. CTCSS (PL) and DCS (DPL) per-channel encode/decode, narrowband (12.5 kHz) and wideband (25 kHz) selectable, 7 W on VHF / 6 W on UHF nominal TX (measured ~6.8 W / 5.4 W into 50 Ω at 7.4 V battery on Jeff’s bench mid-2026). Receive sensitivity is around -123 dBm for 12 dB SINAD on FM narrowband, which is competitive with the Yaesu VX-8DR and comfortably better than the Baofeng F8HP. The 878 will not replace a dedicated analog HT in audio character (the audio chain is digital-optimised and FM voice is slightly less “warm” than the Yaesu’s), but for “I need to hit the local 2 m repeater and the DMR repeater on the same radio without swapping antennas,” it’s fine.
AES-256 encryption — firmware option, regulatory caveat
The 878 II PLUS supports AES-256 encryption on DMR voice transmissions when the AT_Options expansion is flashed. The mechanism is per-channel: each channel can carry an encryption key index (0 = no encryption, 1-16 = one of 16 pre-stored keys), and a transmission on an encrypted channel will only be decoded by another radio with the matching key in the matching slot. The encryption is genuine AES-256 in OFB mode over the AMBE+2 vocoder output, distinct from the older DMRA “Enhanced Privacy” or “Basic Privacy” weak-scrambler modes (which the 878 also supports for back-compat with non-AES networks; both are trivially broken and not actually encryption in the cryptographic sense).
The regulatory caveat is the load-bearing piece: encryption is generally prohibited on US amateur bands per FCC Part 97.113(a)(4), which prohibits “messages encoded for the purpose of obscuring their meaning” except for explicitly permitted cases (control-link telecommand of an amateur space station, control-link telecommand of a model craft, and one or two other narrow cases). AES on amateur DMR is not in the permitted-exceptions list, and the FCC has historically interpreted the rule as banning enabled-encryption operation on amateur frequencies. AES is legal for some Part 90 land mobile work (where the 878 is not type-accepted, so you cannot legally use it for Part 90 work either), and there are gray-area arguments around emergency-services interop scenarios, but for routine amateur operation the AES-256 feature should be configured but disabled on all channels. The full deep treatment is in [Antennas Vol 31 (Regulatory & RF Safety) §6](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol31.md) and Vol 22 (Frequency Planning) §7. The practical AT_Options unlock value is the other features it ships with — see §4.
Promiscuous mode (Digital Monitor) — the recon killer feature
“Digital Monitor” (also called “Promiscuous Mode” in the community) is the 878’s most useful operational mode for understanding what’s actually happening on a DMR network in your area. Normally a DMR receiver only decodes traffic that matches its configured colour code, slot, and talkgroup; everything else is rejected before the AMBE decoder. Promiscuous mode disables the colour-code, slot, and talkgroup filters and decodes anything DMR-shaped on the configured channel frequency. You hear every talkgroup active on slot 1 and slot 2 of that repeater, regardless of what’s in your codeplug.
Two flavours: single-slot promiscuous (decode any talkgroup on slot 1 OR slot 2 depending on which is selected on the channel) and dual-slot promiscuous (decode any talkgroup on either slot — the radio rapidly interleaves decode between slots, which means a small loss of audio at the slot boundaries but a near-complete view of the repeater’s activity). Toggle is via a programmable side button (default SK2 = single-slot toggle; long-press for dual-slot in newer firmware). Combined with the BrandMeister “last-heard” web feed (https://brandmeister.network/?page=lh) and a couple of minutes of listening, promiscuous mode lets you build an empirical view of which talkgroups are actually in use on your local repeater before you commit any of them to a codeplug entry. This is the “DMR network reconnaissance” workflow that makes the 878 (and its TYT/Retevis cousins, which also support promiscuous mode) qualitatively different from a more-locked-down commercial DMR HT.
Roaming — auto-switch to the strongest repeater
A roaming zone is a list of DMR channel entries (typically the same talkgroup on multiple geographic repeaters), with priority order and an RSSI threshold. The radio monitors the current repeater’s RSSI; when it drops below the configured threshold (default -110 dBm, tunable -90 to -125 dBm) for the configured dwell time (default 10 seconds, tunable 5-60 seconds), the radio scans the other repeaters in the roaming zone in priority order and switches to the strongest one above the threshold. Useful for mobile DMR — drive between repeater coverage areas without manually changing channels. Setup is fiddly (each entry in the roaming zone is a separate codeplug channel entry, and you have to keep the talkgroup IDs consistent across them) but once dialled in works well. The 878’s roaming implementation predates BridgeCom’s “roaming wizard” feature in the V4.xx CPS, which streamlines the setup considerably.
APRS — analog AFSK at 1200 baud, OR DMR data
The 878 has an internal TNC that supports two APRS transports:
-
Analog APRS over AFSK on a configurable VHF channel (typically 144.390 MHz in ITU Region 2, 144.800 MHz in Region 1) — standard AX.25 1200-baud Bell 202 signalling. Same APRS network as every other amateur APRS user; the 878 can beacon position (from its internal GPS) and decode received beacons. Messaging is supported but the keypad-based message entry is the usual amateur-HT pain.
-
DMR APRS over BrandMeister data services — APRS-equivalent position beaconing transmitted as a DMR data packet on a special talkgroup (TG 5057 — BrandMeister’s APRS gateway), which BrandMeister relays into the analog APRS-IS network. Useful if you’re in DMR coverage but not in APRS coverage; less useful where both networks coexist. Beacon interval is per-channel configurable (typically 5-30 minutes).
The DMR-APRS gateway is the more interesting mode operationally because it bridges the DMR network back into the broader APRS ecosystem; for a hotspot user with no nearby APRS digipeaters but full DMR coverage via the hotspot, it is the only APRS path that works.
Bluetooth audio + PTT — the mobile killer feature
The CSR8635 BT 4.2 chipset supports HSP/HFP profiles (handset/handsfree). Practically this means:
-
Bluetooth headset (any HFP-compliant single-ear or stereo headset — Jeff has used the JABRA Talk 25 with no issues, and the Plantronics Voyager Legend also works). Headset audio is mono regardless of the headset’s stereo capability (HFP-only, not A2DP). PTT is initiated by the headset’s call-answer button on most HFP headsets, configured via the BT pairing menu.
-
Bluetooth PTT button — a small dedicated BT HID device that maps a button press to the PTT trigger. BridgeCom sells the WBP-1 official BT PTT (~USD 50 mid-2026), and several generic BT PTT buttons (Senhaix, BTech BT-PTT) work for around USD 25-30. The PTT button pairs once and reconnects on power-on; useful for vehicle use where the HT is in a cup holder or belt clip and you don’t want to fumble for the side PTT.
Bluetooth latency is ~120-200 ms end-to-end, which is noticeable on simplex Tier I but not problematic on repeater Tier II (DMR’s own buffering and the network delay swamp the BT latency). Battery cost of leaving BT active is around 15-20% additional drain over BT-off operation.
Channel/zone/talkgroup capacities
| Resource | Capacity |
|---|---|
| Channels (analog + DMR combined) | 4,000 |
| Zones (channel collections) | 250 (with 250 channels per zone) |
| Talkgroups | 10,000 |
| DMR contacts (radioid.net DB) | 200,000 |
| Scan lists | 250 (with 50 channels per scan list) |
| Roaming zones | 64 (with 64 channels per roaming zone) |
| Hot keys / one-touch entries | 20 |
| Encryption keys (AES-256, AT_Options) | 16 stored |
200k contacts is enough to hold the entire current radioid.net DMR database (currently around 195k entries mid-2026 and growing slowly — the radio displays caller name + city + state on receive lookup, which makes BrandMeister chatter much more readable than a numbers-only ID display).
4. Programming workflow
The 878’s codeplug is the most complex programming surface in the lineup — significantly more involved than any analog HT or scanner, comparable in complexity to a commercial Motorola APX codeplug. Getting it right the first time requires understanding the codeplug’s object hierarchy, the cable protocol, and the AnyTone CPS workflow.
Cable
The required cable is the AnyTone official programming cable (PC-58 / PC-127), USB-C on the radio end, USB-A or USB-C on the host end, containing an FT232 or CH340 USB-serial bridge IC and the K-2-pin breakout to the radio’s data lines. BridgeCom sells these for USD 25-35 mid-2026; identical-looking generic USB-C cables from Amazon/AliExpress that do not contain the FT232 will not work — they enumerate as USB charging cables only, with no data path. The diagnostic for “is this the right cable” is to plug it in (no radio attached) and check Windows Device Manager — the cable should show up as “USB Serial Port (COMx)” or similar; a bad cable shows up as nothing or as a generic HID device.
Driver-wise: modern Windows 10/11 ships with FT232 and CH340 drivers in-box and the cable will Just Work; on older Windows you may need to install the FTDI VCP driver manually (https://ftdichip.com/drivers/vcp-drivers/). On Linux the cable enumerates as /dev/ttyUSB0 (FT232) or /dev/ttyUSB0 (CH340 via ch341-uart module), no install needed, but the AnyTone CPS is Windows-only so you’ll be running it under Wine or in a Windows VM — see Vol 21 §4 for the cross-platform programming-software treatment. The CHIRP project has experimental D878UV support but does not handle the DMR talkgroup / contacts / roaming complexity — useful for pure analog-channel emergency edits but not a full CPS replacement.
Software — the canonical AnyTone CPS
The AnyTone D878UV(II)(PLUS) CPS is the vendor-supplied configuration tool — Windows-only, free download from BridgeCom (https://www.bridgecomsystems.com/pages/anytone-software), version-locked to firmware family. The current as of mid-2026:
- D878UVII PLUS firmware V4.00 release 250815 pairs with CPS V4.00 (released August 2025)
- D878UVII PLUS firmware V3.04 (earlier bootloader generation) pairs with CPS V3.04
- The older D878UVII (non-PLUS) family runs CPS V2.04 against firmware V2.04 — separate product line in BridgeCom’s listings
The CPS version must match the radio firmware family. Cross-version CPS-vs-firmware combinations produce confusing failure modes (CPS reads the codeplug but the channel definitions are corrupted on write; or the write succeeds but the radio displays “wrong codeplug” on boot). Always download the BridgeCom bundle that matches your radio’s firmware — the bundle ships as a ZIP with both CPS + firmware in the same release, and they are tested together.
Third-party tools that supplement the canonical CPS:
- CPSProgrammer (community, free) — read/write codeplugs without the full CPS UI, useful for scripted backup
- AnyTone-Sync (community, free) — sync codeplugs across multiple radios, useful when you have two 878s and want them on the same channel set
- DCS-CodePlugMaster (community, paid USD ~30) — alternative CPS editor with better diff/merge and CSV import/export than the AnyTone CPS
- dmrconfig (community, OSS C++) — CLI tool that reads/writes 878 codeplugs from a text file; the “infrastructure-as-code” answer for codeplug management. Limited to a subset of CPS features (no encryption-key handling, no AT_Options-specific fields) but excellent for version-controlled codeplug workflows. Source at
https://github.com/sergev/dmrconfig.
The codeplug object model
The codeplug’s hierarchy is the single most confusing thing about the radio for a new owner. Five interrelated object types, with cross-references:
Channels are the leaf — one entry per RF channel (DMR or analog). Each channel carries:
- Channel name (16 chars)
- Channel type (Analog / DMR)
- RX freq, TX freq (separate — for a repeater, TX = RX + offset)
- TX power (Turbo / High / Mid / Low — roughly 7W / 5W / 2.5W / 1W on VHF, 6W / 4W / 2W / 1W on UHF)
- Bandwidth (12.5 kHz / 25 kHz)
- For analog: CTCSS/DCS encode + decode tone, squelch type
- For DMR: colour code, slot, contact (the talkgroup), RX group list, scan list, optional encryption key, optional APRS report config, optional roaming zone reference
Talkgroups (Contacts) are the DMR addresses — a talkgroup is a triplet of (Talkgroup Number, Call Type, Slot). Examples: (91, Group Call, Slot 2) is the BrandMeister Worldwide English talkgroup on slot 2; (3162, Group Call, Slot 2) is the Michigan statewide talkgroup. Talkgroups are referenced by channels, and are also stored in the “Digital Contacts” list (separate from the radioid.net DB which is the “Digital Contact List” — confusingly named) for direct call lookup.
RX Group Lists are sets of talkgroups that a channel listens for in addition to its primary contact. If a channel has talkgroup 3162 as its primary and an RX group list containing TGs 91, 3100, and 31620, then receiving on that channel will decode any of {3162, 91, 3100, 31620} traffic on the channel’s slot. Used to subscribe to multiple talkgroups on a single repeater without separate channel entries per TG.
Zones are collections of channels (up to 250 channels per zone), and they are the user-facing organisation unit — the channel-knob selector navigates within a zone, and the zone-select button (default a long-press of the SK1 button) switches between zones. Typical zone layout: one zone per local repeater (containing all the talkgroups available on that repeater as separate channel entries), one zone per hotspot (containing all the talkgroups you care about), one zone for analog repeaters, one zone for simplex, one zone for travel.
Scan Lists are channels to scan in order when scan mode is activated. Per-list config of priority channel (always listen for activity), look-back time, dropout delay.
Roaming Zones (DMR-specific) are channels-with-same-talkgroup across multiple repeaters, for the auto-switch behaviour described in §3.
Hot Keys / One-Touch Entries are 20 programmable keypad shortcuts (e.g. # + 1 = “send my position to TG 5057”) for common operations.
The object model has many-to-many relationships everywhere: a talkgroup is referenced by many channels, a channel references one talkgroup but many RX-group-list talkgroups, a scan list references many channels, a roaming zone references many channels (which must all reference the same talkgroup), etc. Editing in the CPS without understanding the full graph is how codeplugs get corrupted.
The workflow
The practical authoring sequence:
-
Define DMR contacts (talkgroups) first — populate the Digital Contacts table with every talkgroup you might ever want to reference. Easier to start with the BridgeCom-provided “starter” contact list (downloadable, contains the canonical BrandMeister + TGIF talkgroups) and edit from there. The Digital Contact List (the 200k radioid.net dump) is separate and is imported once via the dedicated “Digital Contact List” CPS menu — see §5 for the source CSV.
-
Define RX group lists — group your talkgroups into RX-list sets per local repeater / hotspot pattern.
-
Define channels — one per (frequency, slot, primary talkgroup) tuple. For DMR repeaters with many talkgroups, this means many channels per repeater. Naming convention matters; the standard is
<Repeater>-<TGname>or<HS>-<TGname>(Hotspot prefix), 16-char limit so abbreviations are forced. -
Define zones — group channels by repeater/hotspot/use. The first zone in the list is the default-on-power-on zone.
-
Define scan lists — for each zone you want to scan, build a scan list referencing the channels in that zone.
-
Define roaming zones (optional) — for talkgroups that exist on multiple geographic repeaters.
-
Configure encryption keys (only if you’ve thought hard about §3 — and even then, configure but don’t enable on amateur channels).
-
Configure APRS — beacon interval, beacon path, GPS report destination talkgroup.
-
Set radio-level options — DMR ID, callsign, intro screen, boot-up pic, key-tone, backlight timeout, power-save mode, etc.
-
Write the codeplug to the radio: CPS → Program → Write to Radio. Full image including the contact DB takes ~3 minutes on a USB 2.0 host; codeplug-only (without DB) is ~20 seconds.
Worth doing on paper first: sketch the zone-to-channel-to-talkgroup mapping before opening CPS. The CPS UI is dense and not forgiving of “let me just rearrange these” experimentation — a mid-edit zone reordering can leave channel references dangling.
AT_Options expansion
AT_Options is the BridgeCom-distributed firmware expansion package that adds features beyond the base firmware: AES-256 encryption (the most-discussed feature, see §3 caveat), expanded language support, an additional FM broadcast receiver tuner option, expanded GPS NMEA output, additional Bluetooth profiles. The AT_Options bundle ships as a separate flash image and is loaded via the same firmware-update procedure as a regular firmware update — but the load is destructive of the codeplug (the encryption key indexes shift) so always back up the codeplug and the AT_Options image and the base firmware before loading.
The bundle filename pattern is AT_Options_v9.zip (current major as of mid-2026 is v9; older v7/v8 archives may still be in the system for the V3.04 / V2.04 firmware families respectively). The AT_Options enable code is a per-radio activation key that BridgeCom sends after purchase; the key is tied to the radio’s IMEI / serial number and is not transferable. Lose the key and BridgeCom will reissue against your purchase record; lose both the key and the purchase record and you’re buying AT_Options again.
Backup before edit — non-negotiable
DMR codeplugs are intricate enough that a partial write or an interrupted programming session can render the radio unbootable. The recovery procedure (BridgeCom’s “factory reset and re-program” guide) takes 30-60 minutes and assumes you have a working codeplug to write back. Always read the current codeplug out and save it to a versioned file before any write operation. The codeplug is the single most valuable artifact in the entire DMR setup — it represents hours of authoring work, and CPS does not auto-version.
See §5 for the backup discipline and file paths.
5. Codeplug backups
The local backup hierarchy lives under ../../programs/anytone-d878uvii/ (relative to this volume source). Structure:
programs/anytone-d878uvii/
├── CodePlugs/ ← versioned .rdt codeplug snapshots
│ ├── 2026-05-20_pre-WPSD-edit.rdt
│ ├── 2026-05-22_post-WPSD-edit.rdt
│ ├── 2026-05-24_current.rdt
│ └── README.md ← change-log per codeplug
├── Custom Boot Pic/ ← startup-screen bitmaps
│ ├── N0SWN_callsign_160x110.bmp
│ ├── N0SWN_callsign_160x110.png
│ └── bmp-conversion-notes.md
├── Firmware/ ← .spi firmware archives
│ ├── D878UVII V2.04/ ← original 878 II (non-PLUS) firmware
│ │ ├── D878UVII_V2.04_official_release.zip
│ │ ├── CPS_V2.04.zip
│ │ ├── AT-D878UVII-PLUS-USER-MANUAL.pdf
│ │ ├── AT-D868UV_D878UV_Programming_Guide_1.33.pdf
│ │ └── JSON_to_CSV_converter.exe
│ ├── D878UVII V3.04/ ← pre-BL_v2 II PLUS firmware
│ │ ├── D878UVIIPLUS_V3.04.zip
│ │ ├── CPS_V3.04.zip
│ │ └── release_notes.txt
│ └── D878UVII V4.00/ ← current BL_v2 II PLUS firmware (250815 release)
│ ├── D878UVIIPLUS_V4.00_250815.zip
│ ├── CPS_V4.00.zip
│ ├── roaming_wizard_guide.pdf
│ └── release_notes.txt
├── AT_Options_v9.zip ← AES + extended features
├── AT_Options_key_N0SWN.txt ← per-radio activation key (do NOT commit publicly)
├── Contact_DB/
│ ├── 2026-05-20_radioid_dump.csv
│ └── README.md
└── README.md ← top-level index for this directory
Cadence: re-backup the codeplug on every meaningful edit, before every firmware update, and after every successful firmware update (the post-update read is the verification step that the new firmware can correctly serialise the codeplug). Filename convention: YYYY-MM-DD_short-description.rdt. The README in CodePlugs/ carries a per-file change log: what was added/removed, why, and what the test result was (e.g. “added TG 31660 Michigan Statewide on Slot 2 of WPSD hotspot; tested with hotspot at 145.575 simplex, decoded successfully”).
Most recent backup as of this writing: TBD — Jeff will fill in when the codeplug is next read for an edit.
Firmware update procedure (for completeness):
- Read current codeplug → save as
YYYY-MM-DD_pre-fw-update.rdt - Power off radio, hold PTT + SK1, power on → enters bootloader mode (display shows “MCU UPDATE”)
- Connect cable; run the firmware updater (in the firmware ZIP) → select the .spi file → write
- Power-cycle radio; verify it boots cleanly and shows the new firmware version in the boot-info screen
- If AT_Options is enabled, re-flash AT_Options against the new base firmware (it’s bundled separately and order matters: base firmware first, then AT_Options on top)
- Write the saved codeplug back; verify the radio responds correctly on a known channel
Recovery from bricked radio: hold PTT + SK1 + the side PA button on power-on enters the recovery bootloader (different from the regular bootloader mode); the BridgeCom recovery firmware ZIP includes the matching writer tool. This has rescued every brick Jeff has produced in the wild, but takes 30-60 minutes per recovery.
The Custom Boot Pic is a 160 × 110 monochrome bitmap displayed at power-on. Jeff’s N0SWN callsign boot pic lives in the Custom Boot Pic subdirectory as both the .bmp ready-to-flash format and the .png source. Bitmap conversion uses the BridgeCom-supplied tool or the community D878UV_BootPic_Converter Python script (in the same directory). See §7 for the workflow.
The Contact DB subdirectory holds dated CSV dumps from radioid.net for traceability — when the contact database lookup gives a wrong name for an ID, the diff against the most recent dump narrows down whether it’s a stale local DB (re-import the newer dump) or a radioid.net data issue.
The AT_Options activation key is per-radio and per-license; the key file is kept in this directory but should not be committed to a public repository — it contains the radio’s serial number cross-referenced with the BridgeCom-issued activation code. Hack Tools repo is private (see ../CLAUDE.md discussion of MY_GEAR sensitivity); the key file lives here for the same reason.
6. Field use
Antenna pairing
The stock 12 cm dual-band whip is acceptable for ~75% of operations — talking to the hotspot in the same room, or hitting a strong nearby repeater. For anything else, an upgrade pays back immediately. The first-tier recommendations:
- Nagoya NA-771 (~USD 25 mid-2026, ~40 cm whip, SMA-male centre pin — direct fit) — the budget upgrade that improves nearly every cheap dual-band HT. +2-4 dB over stock on 2 m, +1-2 dB on 70 cm. The default upgrade for the 878 + Baofeng + Yaesu trio. Caveat: counterfeit NA-771s are widespread on Amazon; the genuine Nagoya has a glossy black finish and a Nagoya-branded gold-tone SMA collar. The clones are matte and have a duller collar. Audibly different on RX (3-5 dB worse).
- Comet SMA-W100RX (~USD 40) — slightly longer (~45 cm), dual-band tuned, marketed as RX-extended (covers 100 MHz - 1 GHz with some gain across the band). The “if you can spend slightly more than the NA-771” pick.
- Smiley 270 SlimDuck (~USD 35) — Smiley Antennas’ US-made dual-band whip; 22 cm flexible whip designed for HT use. Better than the stock but shorter than the NA-771 — the right pick when you want better-than-stock without the NA-771’s “antenna bigger than the radio” form factor.
Second-tier (for vehicle / longer-range work, requires an antenna mount): NMO mag-mount with the Diamond NR-770HB (dual-band gain antenna, ~38” tall, +5.5 dB / +7.6 dB on 2 m / 70 cm respectively) on the vehicle roof, with a 3-5 m run of LMR-240 down to a BNC-female that adapts to the HT’s SMA-female with a short pigtail adapter. The 878 gets dramatically more range in a vehicle with a roof-mounted antenna; the HT antenna inside a Faraday-cage vehicle (especially modern coated-glass cars) is around 10-15 dB down from outside.
Deep treatment of antenna selection per radio: [Antennas Vol 29 (Use-case Matrix)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol29.md). Portable monopole theory and the DIY + Buy duality: [Antennas Vol 9 (Portable & mobile monopoles)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol9.md).
Hotspot pairing
The primary use case for the 878 in Jeff’s setup is HT-to-hotspot DMR via the DIY WPSD hotspot, with the SkyBridge Plus as the commercial backup. The hotspot operates at 10-20 mW on a 2 m or 70 cm simplex frequency (Jeff’s WPSD is on 70 cm at 432.875 simplex, locally-uncoordinated frequency in the amateur band per local coordinator guidance — see Vol 19 §4 (DIY WPSD HotSpot — Frequency Coordination)). The 878 talks to the hotspot at ~5-30 ft range with the stock antenna at low TX power (Mid or Low, ~1-2 W is plenty); the hotspot bridges the conversation to BrandMeister / TGIF / WPSD via the internet, giving access to any talkgroup on any network without needing a local DMR repeater in range.
Configuration on the 878 side: one zone called “HS-WPSD” containing one channel per talkgroup of interest, all on 432.875 simplex, all on slot 2 (community convention for hotspots), all on colour code 1 (default; matches the hotspot’s default). Talkgroups: 91 (BrandMeister Worldwide English), 3100 (BrandMeister USA Nationwide), 3162 (Michigan Statewide), 31660 (Michigan Regional), 9990 (Echo Test — the “ping a known-working talkgroup to confirm the path is up” channel), and whatever else is in current use. The hotspot zone is the most-used zone on the radio.
For direct-repeater use (no hotspot), the 878 hits any BrandMeister-connected DMR repeater in range — local repeater frequencies, offsets, colour codes, and talkgroups are documented in the local repeater council directory and at https://brandmeister.network/?page=repeater for any specific repeater. Each repeater gets its own zone with its talkgroups as channels.
Posture
The 878 is EDC / portable / handheld — belt-clip carry, docked to a desktop charger when not in use, occasional in-vehicle deployment with a BT PTT and either an external antenna or the WBP-1 BT speaker-mic. Jeff’s most-used posture is “docked next to the laptop, BT-paired to a Plantronics Voyager Legend, monitoring TG 91 + TG 3162 in the background while working.” The radio is rarely truly portable in the sense of “carried on a hike” because the Baofeng F8HP or VX-8DR are both lighter and more drop-tolerant for that use; the 878 lives where it’s most useful, which is on the desk or in the car.
DMR ID and operational posture
DMR operation requires a DMR ID (registered at https://radioid.net — free, requires proof of amateur license, typically issued within 24 hours). The DMR ID is a 6 or 7-digit number that uniquely identifies the radio operator on the global DMR network. Jeff’s is configured into the codeplug at the radio-level options; without it, the radio will refuse to TX on any DMR channel. The DMR ID is per-operator, not per-radio — Jeff’s single DMR ID covers both the 878 and any other DMR radio he programs.
Talkgroup selection follows community norms — see Vol 20 §6 (Talkgroup hygiene) for the long version, but the short version: hot-button talkgroups (TG 91 Worldwide, TG 3100 USA Nationwide) are not for ragchew; QSO on TG 3162 Michigan or a regional / local talkgroup; use TG 9990 Echo Test to verify your path is up before keying TG 91 to see if anyone is listening. The 878’s promiscuous mode is the right way to discover what talkgroups are actually in use before committing them to your codeplug.
Bluetooth in vehicle
The Bluetooth pairing flow is the standard HFP pairing: enable BT in the radio menu, put the headset in pairing mode, the radio discovers it, confirm the 0000 PIN (most HFP headsets accept blank or 0000), pairing is persistent across power cycles. For the WBP-1 BT PTT button: same pairing flow; the button maps to a software PTT trigger. In-vehicle workflow: HT on the centre console in a cradle, BT speaker-mic on the visor, WBP-1 BT button velcroed to the steering wheel column. No wires. The setup is a meaningful improvement over the wired speaker-mic approach with the Yaesu or Baofengs.
7. Tips and tricks
These are the non-obvious operations that pay back the time to set them up.
Promiscuous mode for talkgroup discovery
Discussed in §3 but worth reinforcing here as the single most valuable operational mode on the radio. Before adding a new repeater to your codeplug, configure a single channel with that repeater’s frequency / colour code / slot, set the channel to dual-slot promiscuous mode, and listen for a couple of evenings. You’ll hear every talkgroup actually in use on that repeater — usually a much smaller set than what’s “available” on paper, and often including a few local-only talkgroups that aren’t published in the network directories. Then build the codeplug zone with the actually-used talkgroups, ignoring the rest. Saves a lot of dead-talkgroup clutter in your zones.
AES-256 — configure but don’t enable on amateur channels
Restating the §3 regulatory caveat in operational terms: with AT_Options flashed, the 878’s encryption configuration UI is fully functional, the encryption keys are stored, and a channel with encryption enabled will produce encrypted DMR traffic on the air. Don’t. On US amateur bands the operation violates Part 97.113(a)(4). Configure the keys (so they’re ready if you ever need them for an authorised non-amateur context — though the 878 isn’t Part 90 type-accepted either, so that authorised non-amateur context is hypothetical) but leave the per-channel encryption-key index at 0 (disabled) on every amateur-band channel. The full deep regulatory treatment is in [Antennas Vol 31 §6 (Part 97.113)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol31.md).
Custom boot pic — the N0SWN callsign workflow
The 878 displays a configurable 160 × 110 monochrome bitmap at power-on, for ~3 seconds before the main UI loads. Jeff’s boot pic is his N0SWN callsign in a stylised font (in programs/anytone-d878uvii/Custom Boot Pic/). Conversion workflow:
- Create a 160 × 110 image in any tool (GIMP, Photoshop, ImageMagick) — pure black-and-white, no greyscale (the radio threshold-binarises any colour input but gives nicer results from a deliberately 1-bit source)
- Save as 160 × 110 1-bit BMP
- Run the BridgeCom
D878UV_Pic_Converter.exetool (in the firmware bundle) → input the BMP → output a.binfile - In CPS: Tool → Boot Image → load the .bin → save the codeplug → write to radio
- Power-cycle the radio → boot pic appears
Easy to do, easy to mess up the proportions. The N0SWN reference image is in the directory for reuse.
Bluetooth PTT — the in-vehicle game-changer
The BT PTT setup (WBP-1 or equivalent + BT headset) is the difference between the 878 being a usable in-vehicle DMR radio and being a fiddly handheld in a cradle. The latency is ~150 ms total which is unnoticeable on Tier II repeater operation. Setup once, leave paired, the BT components re-connect on power-on of the radio. The only operational gotcha is BT-headset battery life — the JABRA Talk 25 gets ~8 hours of mixed use; the Voyager Legend gets ~6 hours. Carry a USB-C charger.
Roaming zone for the local repeater pair
If you operate in an area with two DMR repeaters covering overlapping geography on the same talkgroup (common in suburban areas — there’s often a “north” and “south” repeater for the same network), build a roaming zone with both repeater channels and let the radio auto-switch as you drive between coverage areas. Without roaming you’ll either lose the conversation at the coverage boundary or be manually channel-switching at every hill. Threshold tuning is iterative — start at -110 dBm and 10 sec dwell; if the radio switches too aggressively in marginal coverage, raise the threshold to -105 dBm; if it sticks too long on a fading repeater, lower the dwell to 5 sec.
APRS over DMR via TG 5057
If you want APRS coverage but you’re in DMR-via-hotspot range rather than analog APRS coverage, configure the radio to beacon position over DMR to TG 5057 (BrandMeister’s APRS gateway). BrandMeister bridges those beacons into the analog APRS-IS network, so your position shows up on aprs.fi as if you were beaconing on 144.390 analog APRS. Per-channel APRS report config; beacon interval typically 5-15 min for stationary operation, faster for mobile. The hotspot doesn’t need any special config — it just relays the DMR data to BrandMeister and BrandMeister handles the gateway.
JSON-to-CSV converter (V2.04 era)
The V2.04 firmware bundle ships with a small Windows tool called JSON_to_CSV.exe that converts the community-shared codeplug JSON format (used on several codeplug-sharing GitHub repos) to a CSV that the AnyTone CPS can import. Useful when a fellow operator shares “my full Michigan codeplug” as a JSON file and you want to merge the talkgroup definitions into your own codeplug without copy-pasting 200 entries. The tool is no longer maintained for V3.xx / V4.xx firmware but still works for the talkgroup / contact import paths (the channel-format JSON changed between firmware generations and won’t round-trip cleanly).
Hot keys for frequent operations
The 20 programmable hot keys are underused by most owners. Examples of useful bindings:
# + 1= Send GPS position to TG 5057 (APRS-over-DMR beacon, on-demand)# + 2= Toggle promiscuous mode on the current channel# + 3= Switch to the hotspot zone (one-touch zone change)# + 9= Echo test (Group Call to TG 9990 — verifies the network path is alive)
Programmed via CPS → Optional Settings → One Touch Call. Persists across power cycles. The keypad-shortcut model is much faster than menu-diving for the operations you do every session.
The “where is digital monitor on the side button” CPS path
A frequent first-time-owner question because the menu is unintuitive. Path: CPS → Optional Settings → Key Function → SK1 Short / SK1 Long / SK2 Short / SK2 Long / PF1 / PF2 / PF3 → set to “Digital Monitor” (single-slot) or “Promiscuous” (dual-slot, some firmware versions only). The “Digital Monitor” function isn’t on the radio’s on-screen menu, only via the CPS-programmed side buttons. Set this once and forget it.
AT_Options re-flash after firmware update
A firmware update clears the AT_Options activation because AT_Options patches the base firmware in-place. The recovery is mechanical: re-flash AT_Options against the new base firmware (the AT_Options ZIP contains a writer tool that handles the patching) and re-enter the activation key. Forgetting this step and wondering why AES suddenly doesn’t work is a common post-update support question. Order matters: base firmware first, then AT_Options on top, then re-write codeplug.
Reading the AT_Options bundle’s bundled docs
Inside AT_Options_v9.zip is a small release_notes.txt and a feature_list.txt that document what each version of AT_Options actually adds — useful when comparing AT_Options v7 (V2.04 era) vs v8 (V3.04 era) vs v9 (V4.00 era). The version mapping is not obvious from the BridgeCom product page, and the feature drift between versions is real (v9 added the expanded GPS NMEA output and a few additional Bluetooth profiles not in v8).
8. Resources
Manuals and programming guides (the locally-cached copies in programs/anytone-d878uvii/):
D878UVII V2.04/AT-D878UVII-PLUS-USER-MANUAL.pdf— the user-facing manual, ~80 pages, covers basic operation, menu structure, button assignments. Adequate for the operator but not for the programmer.D878UVII V2.04/AT-D868UV_D878UV_Programming_Guide_1.33.pdf— the load-bearing reference for codeplug authoring. ~200 pages, covers every CPS menu, every codeplug field, every interaction between objects. Goes deeper than the user manual on roaming, APRS, encryption, scan-list semantics. Still applies in most respects to the V3.xx / V4.xx firmware families even though it was written for V2.xx — the deltas are documented in each firmware release’srelease_notes.txt.D878UVII V4.00/roaming_wizard_guide.pdf— the V4.00-era roaming-zone configuration walkthrough, much friendlier than the original roaming setup procedure.
Vendor pages:
- BridgeCom Systems product page (US distributor, primary support): https://www.bridgecomsystems.com/products/anytone-at-d878uvii-plus
- BridgeCom software downloads (CPS + firmware bundles): https://www.bridgecomsystems.com/pages/anytone-software
- AnyTone Tech / Qixiang Electronics (the manufacturer, China): http://www.qx-anytone.com
- BridgeCom DMR support / news: https://www.bridgecomsystems.com/blogs/news
DMR network registration and infrastructure:
- radioid.net (DMR ID registration + contact-DB CSV dumps): https://radioid.net
- radioid.net database dumps page (for the 200k-contact import): https://radioid.net/database/dumps
- BrandMeister network (primary global DMR network): https://brandmeister.network
- BrandMeister last-heard feed (for live talkgroup activity): https://brandmeister.network/?page=lh
- BrandMeister repeater directory (per-repeater frequency / colour code / talkgroup info): https://brandmeister.network/?page=repeater
- TGIF Network (alternative DMR network): https://tgif.network
- W0CHP-PiStar-Dash (WPSD): https://w0chp.radio
Community resources:
- W4CRA codeplug repository (third-party codeplug starting points, Ontario-focused but widely used): http://www.va3xpr.net/anytone-codeplugs/
- GitHub search “AnyTone codeplug” — many regional codeplug shares (US-Michigan, US-California, EU, etc.)
- dmrconfig (CLI codeplug tool, for IaC-style codeplug management): https://github.com/sergev/dmrconfig
Cross-references within this series and the sibling Hack Tools project:
- Vol 1 (Overview) — the series-level navigator
- Vol 18 (SkyBridge Plus) — commercial hotspot sibling, the alternative DMR network access path
- Vol 19 (DIY WPSD HotSpot) — load-bearing; Jeff’s primary hotspot, the most common companion device
- Vol 20 (DMR Network Architecture) — load-bearing; what’s actually on the other end of the network
- Vol 21 (Programming Software Landscape) — the cross-radio CPS treatment
- Vol 22 (Frequency Planning & License Envelope) — Part 97 framing including the encryption / digital-mode rules
- [Antennas Vol 9 (Portable & mobile monopoles)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol9.md) — antenna theory for HT whips
- [Antennas Vol 29 (Use-case Matrix)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol29.md) — per-radio antenna recommendations
- [Antennas Vol 31 (Regulatory & RF Safety)](../../../Hack Tools/Antennas/02-inputs/volume_sources/vol31.md) — the deep Part 97.113 encryption / Part 90 type-acceptance treatment
Books and longer-form references:
- DMR for Radio Amateurs (John S. Burningham, W2XAB) — the standard amateur introduction to DMR; not 878-specific but the right starting point for understanding the network from the protocol up
- ARRL DMR Resources page: https://www.arrl.org/dmr
- AnyTone D878UV Owner’s Manual (BridgeCom-distributed; same file as the locally-cached PDF above)