domainless

Radio Programmer.

Read, inspect and write a Baofeng UV-5RM codeplug straight from the browser.

Transmitting without a valid FCC licence is a federal crime. 47 U.S.C. § 301 requires a licence to transmit; penalties follow under § 501 (criminal), § 503 (forfeiture) and § 510 (seizure of equipment). Receiving is unrestricted. Transmitting is not.

This page reads and writes a file on a radio. It grants no operating authority. The UV-5RM (FCC ID 2AJGM-5RM) holds neither a Part 90 nor a Part 95 equipment grant, and reaches 350–390 MHz, which is federal and military spectrum.

This browser can't reach a serial port. The Web Serial API is needed to talk to the radio, and it is available in Chrome, Edge, Opera and Firefox 151+ on desktop. Safari does not implement it on macOS, iPadOS or iOS in any version, so an iPad will never work here.

You can still open a .img file below to inspect and lint it — that part runs entirely offline in this page.

1 · Load a codeplug

Idle. Turn the radio ON, plug in the programming cable, then press “Read from radio”. The browser will ask which serial port to use.

2 · Channels

ChNameRX (MHz)TX (MHz) ShiftToneBandVerdict

3 · Save or edit

4 · Write to radio

Writing replaces the radio's memory. Download the .img above first — that is your only way back. After writing, this page reads the codeplug back and compares it byte for byte.

5 · Live scan

Receive-only. This takes the radio's audio output, so it shows what is happening on the channel the radio is tuned to — it cannot see signals you are not tuned to, and it never transmits or writes to the radio. Nothing here touches firmware.

This browser won't give the page audio. Live scan needs getUserMedia, which Safari and iOS do not offer here. Use desktop Chrome, Edge or Firefox.

Scan: press SCAN on the handset. Every squelch break is timestamped and logged with whatever can be decoded from it.

level 0.000  ·  closed  ·  CTCSS  ·  DTMF
TimeHeldPeakCTCSS Likely channelDTMF
No activity logged yet.

How this works

The page speaks the UV-17-family protocol over USB serial at 115200 baud: the ident string PROGRAMBFNORMALU, three follow-up frames, then 64-byte block reads and writes across four memory regions totalling 0x8380 bytes. Data on the wire is obfuscated with a conditional XOR against the key "CO 7"; the saved .img is plaintext.

Protocol details were taken from CHIRP's baofeng_uv17Pro.py driver, which is GPL-3. Codeplug decoding is verified against two independent implementations, one in C and one in COBOL.