Two-tone fire/EMS paging for the Quansheng UV-K5 V3 and UV-K1, with a trial build for the older UV-K5 V1. Mark a memory channel as a pager channel, and the radio decodes Quick Call II pages in the background and alerts on the departments you watch. There is no app to launch.
Status: built and bench-tested on a PC, not yet run on a radio. The firmware compiles, and its decoder reports the same pages as the reference model on 149 test inputs. The CHIRP driver round-trips the watch list byte for byte.
A trial build for the V1 radios (UV-K5, UV-K5(8)) also compiles. It uses the radio chip's own tone detector and has had no testing at all; its first real pages on air are the test (section 06).
Input level, low-tone response, and the alert beeps during receive can only be checked on hardware. The test builds in section 07 are for trying exactly that: use them at your own risk, and back up your radio first.
Each memory channel gets a pager mode, set in CHIRP:
A normal channel. Nothing is decoded.
The channel is heard as usual. A page for a watched department adds the alert on top.
The channel stays quiet. A watched page opens the speaker so the dispatch is heard. It stays open for the monitor time (60 s by default), and longer while the channel is busy.
On a watched page:
The beeps wait because stacked pages follow at once, and a beep in the middle would cut off the next department's A tone. EXIT acknowledges the page and returns a Silent channel to quiet.
The watch list holds up to 150 departments. Each one has a name, an A tone, a B tone (or a single long tone), minimum lengths and a tolerance.
| Radio | MCU / RF | Can the firmware hear audio? | Pager |
|---|---|---|---|
| UV-K5 V3, UV-K1 | PY32F071 / BK4829 | Yes: RX audio reaches PA4, which is read on ADC channel 4 | Supported |
| UV-K5, UV-K5(8), UV-K6, 5R Plus (V1) | DP32G030 / BK4819 | No: there is no audio path to an ADC pin, and the BK4819 only reports levels | Trial build, using the chip's tone detector |
Sellers mislabel these radios. Look for "V3" or "UV-K1" in the listing. Listings that say "UV-K5(8)" or "K5(99)" are usually the older V1 board.
While a pager channel is receiving, a hardware timer samples the receive audio at 9.6 kHz. The audio is picked up before the speaker amplifier, so a Silent channel can be decoded with the speaker off. When the channel isn't receiving, the sampler is stopped and the radio's power saving is unchanged.
All the arithmetic is 32-bit integer. The whole feature adds about 2.9 KB of flash and 128 bytes of RAM to the firmware, and the watch list is read from flash.
| Test | Result |
|---|---|
| Frequency error | Worst 0.11%, median 0.01%, at 15 dB SNR across 186 distinct tones from 102 to 2875 Hz. The tolerance is 2%. |
| Pages found | All of them at 20 dB SNR and above, about 80% at 12 dB, and none at 8 dB. This covers short (0.65 s) and long (1 s + 3 s) tones, with and without CTCSS, and ±1% transmitter error. |
| Wrong department | None in any test run |
| False pages | None in 2.9 hours of recorded dispatch traffic. Every page it reported there was a real one, confirmed by FFT. |
| Firmware vs model | The same pages on all 149 test inputs |
UV-K1 & UV-K5 V3 (F4HWN Pager).If you keep your departments in tones.cfg files (INI sections with atone, btone, lengths, tolerance and description), a script copies them into a saved CHIRP image. It reads only the tone fields:
python3 cfg2pager.py radio.img tones.cfg --match "Delmar|Elsmere" --list # preview python3 cfg2pager.py radio.img tones.cfg --match "Delmar|Elsmere" # write, then upload in CHIRP
The watch list is stored with the radio's other settings, so it moves with the firmware's multiboot config banks. A radio without the Pager edition simply ignores it.
The V1 radios (UV-K5, UV-K5(8), UV-K6, 5R Plus) can't sample audio, so this build hands the job to the BK4819 chip. Its SelCall detector holds 16 programmable tones and reports which one it heard. The firmware times those reports and matches them to the watch list with the same A-then-B rules. The build fits in the V1's 60 KB by leaving out the spectrum analyzer, FM radio, AirCopy and screenshots.
* is an Alert channel and one starting with ! is a Silent channel. That works with stock CHIRP or on the radio.PG 707.3 x3. The first real pages will show how the chip behaves.Flash it with uvtools (web-based; Chrome or Edge), after backing up the EEPROM and calibration. If the detector proves too coarse, the fallbacks are a small hardware audio tap to a spare ADC pin, or the V3 radio.
Untested on any radio. These builds compile and pass the PC tests, nothing more. Flashing custom firmware can leave a radio needing recovery, so back up first. The radio's bootloader is not touched, so a bad build can be replaced by flashing again.
| File | For | Flash or use with |
|---|---|---|
| uvpager-v3-k1-20261021.bin | UV-K5 V3, UV-K1 | UV Studio. Dump the calibration first. |
| uvpager-v1-trial-20261021.packed.bin | UV-K5, UV-K5(8), UV-K6, 5R Plus (V1) | uvtools. Back up the EEPROM and calibration first. |
| f4hwn_pager.chirp.py | V3 / K1 build | CHIRP: File → Load Module |
| cfg2pager.py | V3 / K1 build | Python 3: tones.cfg files into a CHIRP image |
| SHA256SUMS.txt | All | sha256sum -c SHA256SUMS.txt |