# losehu/uv-k5-firmware-custom for Quansheng UV-K5 and UV-K6

> This C++ firmware repository extends Quansheng UV-K5 and UV-K6 radios with selectable features such as Doppler frequency control, spectrum display, SI4732 reception, expanded EEPROM support, and Chinese or English interfaces. The main trade-off is that firmware variants have different hardware requirements, and the documented default build settings do not enable every advertised feature.

**losehu/uv-k5-firmware-custom** — 全功能泉盛UV-K5/K6固件 Quansheng UV-K5/K6 Firmware

- Repository: https://github.com/losehu/uv-k5-firmware-custom
- Stars: 1,383 · Forks: 185
- Language: C++
- License: Apache-2.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/losehu-uv-k5-firmware-custom

## Why uv-k5-firmware-custom Extends the Quansheng UV-K5 and UV-K6

This project targets owners of Quansheng UV-K5 and UV-K6 radios who want firmware behavior beyond the standard feature set. Its scope includes radio operation, spectrum display, automatic Doppler frequency adjustment, messaging, Chinese input, an SI4732 receiver, SSB demodulation, AM repair, MDC1200 signaling, and a signal-strength display. These are separate capabilities rather than guarantees supplied by every build.

The README describes Chinese and English variants, including the LOSEHUxxx, LOSEHUxxxK, LOSEHUxxxH, LOSEHUxxxE, LOSEHUxxxEK, and LOSEHUxxxHS families. Feature availability depends on the variant. For example, LOSEHUxxx does not require expanded EEPROM, but it also lacks Doppler mode, Chinese channel names, custom boot text, and the boot image. The K and H families support expanded storage and additional Chinese features, while some options, such as Chinese input and SMS, remain absent from those variants.

This makes the project a collection of hardware-dependent firmware targets rather than one universally superior image. The correct starting point is the feature list for a particular suffix, followed by confirmation that the radio has the required EEPROM capacity. Flashing a variant that expects storage the hardware does not have would not be a sensible use of this project.

## Build-Time Feature Selection in the uv-k5-firmware-custom Makefile

Based on the repository layout, feature availability is controlled during compilation rather than presented as a single runtime settings screen. The Makefile defines ENABLE_ options for stock functions, custom modifications, display behavior, EEPROM type, language, and protocol support. The visible default values include ENABLE_AM_FIX=1, ENABLE_RSSI_BAR=1, ENABLE_SCAN_RANGES=1, ENABLE_COPY_CHAN_TO_VFO=1, ENABLE_VOX=1, and ENABLE_FLASHLIGHT=1.

Several advertised functions are disabled by default in the visible Makefile settings. ENABLE_SPECTRUM, ENABLE_MDC1200, ENABLE_CHINESE_FULL, and ENABLE_ENGLISH are set to 0 in the displayed section, while ENABLE_BOOTLOADER is also 0. This matters because a feature appearing in the README or in source files does not prove that a default build contains it. Compilation options must be checked for the image being produced.

The repository also includes firmware.ld, platform headers, drivers, hardware files, application code, feature modules, and scripts such as gen.py, genJson.py, and fw-pack.py. Based on that layout, the build integrates application and hardware-specific code, links it for the radio platform, and processes output through firmware-related tooling. The README excerpt does not document the complete output naming or flashing procedure, so it would be unsafe to infer one from the filenames alone.

## Compiling uv-k5-firmware-custom Through Its Docker Environment

The repository provides online firmware compilation through K5Web, which the README presents as the path that does not require a local build environment. It also points users to the custom bootloader and separate Doppler firmware projects. The English and Chinese versions are at the K5Web site:

```text
https://k5.vicicode.com/
```

For local compilation, the repository includes Dockerfile, compile-with-docker.sh, and compile-with-docker.bat. The Dockerfile selects the amd64 platform, installs base development tools, arm-none-eabi-gcc, arm-none-eabi-newlib, Git, pip, and python-crcmod, then copies the repository into /app. Its final make command is commented out, so the image is configured as a build environment rather than automatically producing a firmware file.

The Dockerfile contains this environment setup:

```dockerfile
FROM --platform=amd64 archlinux:latest
RUN pacman -Syyu base-devel --noconfirm
RUN pacman -Syyu arm-none-eabi-gcc --noconfirm
RUN pacman -Syyu arm-none-eabi-newlib --noconfirm
WORKDIR /app
COPY . .
```

The Makefile documents the basic compilation command:

```bash
make
```

The visible README excerpt does not provide a complete invocation for compile-with-docker.sh, nor does it explain how to select and flash a finished image on the radio. For an initial use, compiling through K5Web is the documented route with the fewest missing local details. After selecting the matching UV-K5 or UV-K6 target and firmware variant, the first operational check should be whether normal frequency and channel operation works before entering custom modes such as spectrum, Doppler, or SI4732 control.

## UV-K5 Doppler Mode and Expanded EEPROM Constraints

The separate Doppler firmware is the clearest example of why firmware variant selection matters. According to the README, it can independently calculate the angle, altitude, speed, distance, and frequency offset for as many as 40 satellites. It can also display satellite positions and a directional display. That is a different delivery model from the main multi-function firmware family: it is presented as independent firmware in a dedicated repository directory.

This mode requires at least 2 MiB of EEPROM. By comparison, the LOSEHUxxx and LOSEHUxxxE variants require no expansion, the K and EK families require at least 1 MiB, and the H family requires at least 2 MiB. Storage is therefore both a hardware constraint and a variant-selection rule. The bootloader documentation adds that its current implementation applies to 4 MiB EEPROM and says that code changes would be needed for other EEPROM sizes.

Doppler operation has a specific input workflow. In Doppler mode, short pressing `5` opens time entry, `*` acts as the decimal point, and `MENU` confirms. `MENU` then cycles parameters for adjustment, `PPT` transmits, and short pressing the first side key enables monitoring. These controls are specific to the documented Doppler interface and should not be treated as ordinary channel controls. The README does not document satellite data sources, update intervals, failure recovery, or rollback behavior.

## EEPROM Layout and the Cost of Custom Radio Data

The README includes an EEPROM address map for persistent data, showing that custom features can consume fixed regions rather than behaving as disposable UI settings. MDC1200 contacts occupy a documented area around 0x01D00 through 0x01E00 and 0x01F90 through 0x01FF0, with 16 bytes per contact: the first two bytes hold the MDC ID and the remaining bytes hold the contact name. A byte at 0x01FFF stores the number of MDC1200 contacts, while 0x01FFD through 0x01FFE store the MDC ID.

This layout creates a practical upgrade consideration. Enabling contact storage or other data-heavy features may depend on a matching firmware variant and sufficient EEPROM capacity. A firmware change is not merely a replacement of interface code if stored addresses or record formats also change. The excerpt does not provide a migration procedure, version-aware import tool, or rollback documentation, so it does not establish that settings survive every firmware upgrade.

The broader feature set increases flash, code, and memory pressure as well. The README links to a larger firmware system that can load images above 64 KB and says it can reach 512 MB, but that system is described as under development. It should not be confused with the currently documented firmware families or treated as a confirmed feature of this repository. The current Makefile provides compile controls, while the linked separate projects address storage and firmware-loading constraints that are outside the ordinary default build.

## Differences Between Stock Quansheng Firmware and uv-k5-firmware-custom

The real alternative is the stock firmware supplied for the radio, rather than another third-party project with the same name. Stock firmware defines the normal hardware baseline and avoids opting into this repository's feature combinations, custom key mappings, persistent-data layouts, and potential EEPROM expansion requirements. That makes it the safer starting point when the requirement is conventional UV-K5 or UV-K6 operation without Doppler calculations, SI4732 support, custom boot images, Chinese input, or extended displays.

uv-k5-firmware-custom takes a modular but configuration-heavy approach. Operators can retain familiar radio controls while adding features such as automatic Doppler adjustment, one-button frequency alignment, spectrum access, AM repair, SSB demodulation, and short-message support. The cost is that choosing and compiling the correct variant becomes part of adoption. A single feature may require a specific storage size and may be disabled by default in the Makefile.

A separate real alternative for satellite tracking is the standalone Doppler firmware linked by the repository. Instead of packaging Doppler calculations with a broad multi-function radio image, it focuses on satellite position and radio control and imposes its own 2 MiB EEPROM requirement. The decision is therefore between a broad feature firmware family and a specialized satellite firmware. The bootloader is another separate approach because it loads firmware into RAM and enables switching between images, but the README limits its documented EEPROM support to 4 MiB without code changes.

## Release Activity, Apache-2.0 Use, and Upgrade Boundaries

The repository is not archived, and the last push was on 2026-10-05. Recent releases include 0.13.3 on 2026-09-20, DPL0.3 on 2026-09-20, and DPL0.2 on 2025-02-12. This supports recent project activity, although recent commits do not establish compatibility with every radio or EEPROM configuration.

The repository identifies Apache-2.0 as its license. That license governs use, modification, and distribution of covered project files under its terms. The linked bootloader, Doppler repository, larger firmware system, and external components can have separate licensing or hardware conditions, so a dependency review should cover each linked component rather than assuming one license file applies to the entire custom-radio ecosystem. This is a source and compliance consideration, not legal advice.

Upgrade planning must account for firmware selection, EEPROM size, stored contacts and messages, and any bootloader arrangement. The README does not document rollback for the main firmware, automatic backup, settings migration, or recovery after a failed flash. It also does not provide a complete flashing tutorial in the visible text. Those omissions are meaningful because radio firmware replacement can affect both operation and persistent data.

## Conclusion

Adopt this firmware if you own a compatible Quansheng UV-K5 or UV-K6 and specifically need one of its custom radio features. Do not select it solely for the full feature list without checking your EEPROM capacity, language, desired functions, and the corresponding build options. The first thing to verify is the exact firmware variant for your hardware, since the documented variants do not all support the same functions and some require 1 MiB or 2 MiB of expanded EEPROM.

## FAQ

### Which uv-k5-firmware-custom variant supports Doppler mode?

The README lists Doppler support for LOSEHUxxxK, LOSEHUxxxH, and LOSEHUxxxEK. The K and EK variants require at least 1 MiB of EEPROM, while the H variant requires at least 2 MiB.

### Can I compile uv-k5-firmware-custom without installing a local toolchain?

Yes. The README directs users to K5Web for online firmware compilation without installing a compilation environment.

### Does the default uv-k5-firmware-custom build include every listed feature?

No. In the visible Makefile settings, ENABLE_SPECTRUM, ENABLE_MDC1200, ENABLE_CHINESE_FULL, ENABLE_ENGLISH, and ENABLE_BOOTLOADER are set to 0. Build options and the selected firmware variant determine the available functions.

## Sources

- [Issues](https://github.com/losehu/uv-k5-firmware-custom/issues)
- [License: Apache-2.0](https://github.com/losehu/uv-k5-firmware-custom/blob/main/LICENSE)
- [losehu/uv-k5-firmware-custom on GitHub](https://github.com/losehu/uv-k5-firmware-custom)
- [README](https://github.com/losehu/uv-k5-firmware-custom/blob/main/README.md)
- [Releases](https://github.com/losehu/uv-k5-firmware-custom/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/losehu-uv-k5-firmware-custom
