VUURWERK

스타73포크2라이선스Other언어C최근 업데이트2026. 10. 10.

Egzumer 기반 UV-K5 펌웨어예요. 음성 탐색 스펙트럼, 적응형 스켈치, 송신 컴프레서, 밴드스코프 등 41가지 기능을 더했어요.

  • UV-K5 / K5(8)
  • UV-K6
  • UV-5R Plus
MCUDP32G030릴리스 파일 분석
💬 댓글 0

릴리스

파일은 GitHub에서 그대로 내려받아요. ‘내 무전기에 넣기’를 누르면 펌웨어 플래싱 도구가 이 파일로 열려요. 마지막 확인 2026. 10. 17.

v1.5.0 VUURWERK v1.5.0 -- The Stabilization Release최신2026. 7. 5.
릴리스 노트
## VUURWERK v1.5.0

The stabilization release. First version recommended for daily use.

### Voice-Seeking Spectrum, complete
- Open the spectrum with F+5, press STAR until the corner reads VOX. Bars only draw on signals that score as human voice.
- UP and DOWN hop between voices. No voice that way and the keys simply tune, so navigation never dead-ends. Hold a key to patrol the band; it stops when it finds someone talking.
- Squeeze PTT to lock the voice you are hearing. A LOCKED banner flashes and the radio parks there and monitors. UP or DOWN releases and resumes the hunt.
- Exit while locked (in frequency mode) and the frequency carries out to your VFO, ready for you to answer in simplex.

### F+EXIT: reset to simplex
One gesture wipes the current VFO back to a clean simplex state: RX and TX tones cleared, repeater offset and direction cleared, frequency reverse off, scrambler off, modulation back to FM. This is also the cure for the classic "green RX light but no sound" mystery, which is almost always a stray RX tone on the VFO. Memory channels are never touched.

### Stability
- Fixed: exiting the spectrum could flip the radio to the other VFO. Holding EXIT slightly too long registered as a fresh press on the main screen, where EXIT is the A/B toggle. Dead now, any timing.
- Fixed: a case where the radio left the spectrum slightly mistuned with the audio path off.
- The spectrum exit is now fully deterministic: you always come back on the VFO you left from, tuned and hearing.

### Other changes
- MTI display mode retired. The spectrum cycles NORM, PEAK, VOX.
- Adaptive scan dwell from the 1.3.x series included: much faster scanning on quiet bands with unchanged weak-signal sensitivity.
- Documentation completely rewritten: screen diagrams, full v1.5.0 key maps, a tone squelch guide, and a WHATS_NEW tour.

### Flashing
Download `vuurwerk-v1.5.0.packed.bin` below and flash it with the browser flasher as usual. The boot screen must read v1.5.0.

Binary: 61,396 of 61,440 bytes, zero warnings.
SHA-256: 14b54b2e84623d4009f619d42e6a3f82230b66d77d7e513b0636f3dfb1ddee15

Thanks to Scott Savage KC7WDG for the field reports, and to DualTachyon, OneOfEleven, egzumer, fagci, Jacek Lipkowski SQ5BPF, and mjwgeek, whose work this project builds on. See CREDITS.md.

73 de KC3TFZ


---

Enjoying VUURWERK? You can support the work at https://buymeacoffee.com/Tokeloshe. More options, including XRP and free ways to help, in [DONATE.md](https://github.com/Tokeloshe/vuurwerk-firmware/blob/main/DONATE.md).
GitHub에서 보기 ↗
v1.2.7 VUURWERK v1.2.72026. 5. 14.
릴리스 노트
> **Note for operators upgrading from v1.2.4:** Public's previous release was v1.2.4. This release brings public up to v1.2.7, incorporating all of v1.2.5, v1.2.6, and v1.2.7. See [CHANGELOG.md](./CHANGELOG.md) in the repository for the full v1.2.5 and v1.2.6 history.

---

## v1.2.7 (May 2026)

SIDE2 keymap symmetry fix, CSS scanner robustness, and economic
re-engineering.

### Fixed (v1.2.6 keymap correction)

- **SIDE2 long-press incorrectly toggled backlight** instead of
  continuing freq-down auto-repeat. The "clean short / long
  separation" model introduced in v1.2.6 was operationally wrong:
  operators expect SIDE2 hold to mirror SIDE1 hold (freq UP and freq
  DOWN should be symmetric). SIDE2 is now press-dispatched with
  auto-repeat, symmetric with SIDE1. ToggleBacklight is no longer
  accessible from spectrum view; operators wanting to toggle the
  backlight while in spectrum should press EXIT first, toggle from
  the main screen, and re-enter via F+5. This is a deliberate UX
  simplification, not a feature loss.

### Fixed (CSS scanner robustness)

- **Pre-flight RSSI gate** added to the CSS scanner. Before launching
  the BK4819 scan engine, `SCANNER_Start(true)` samples RSSI on the
  current frequency; if it reads below carrier-present threshold
  (about -110 dBm), the scan aborts with a `NO SIGNAL` toast and a
  500 Hz double-beep. Today's behaviour on dead air was to run the
  scanner for 60 seconds and surface SCAN FAIL; new behaviour is
  instant feedback that the operator parked on a quiet frequency.
- **CTCSS confirmation logic** changed from two-consecutive-matches
  to single-match, matching the existing DCS behaviour. CTCSS scans
  no longer feel broken next to DCS scans. The BK4819 detector's
  internal voting plus the new pre-flight RSSI gate together provide
  the confidence the second confirmation used to add.
- **Dwell time reduced** from 210 ms to 120 ms (`scan_delay_10ms` in
  misc.c, 21 ticks to 12 ticks). 120 ms is enough for the BK4819
  CTCSS detector to converge on the lowest tone (67 Hz, ~8 cycles)
  with margin. Affects both RF frequency scan and CSS scan.
- **Soft-timeout tightened** from 60 seconds to 30 seconds. With
  faster dwell, single-match CTCSS, and the pre-flight gate, typical
  successful scans complete in 3-10 seconds; 30 seconds is the new
  "this is fruitless" cap.
- **FOUND validation considered but not implemented.** The BK4819
  detector's internal voting plus the pre-flight RSSI gate plus
  sufficient dwell already provide high confidence on FOUND; post-
  validation cost (extra ~500 ms per scan, ~50-100 bytes flash) was
  unfavourable.

### Changed (Economic re-engineering)

- **`TX_COMPRESSOR_GetGainReduction` removed.** Function had zero
  callers across the tree (verified via grep). Dead code.
- **`RSSI_HISTOGRAM_Init` removed.** Function only zeroed the
  histogram global; the C runtime zero-clears BSS at boot, making
  the Init redundant. The main.c call site removed too.
- **`GAIN_STAGING_Reset` made `static`** to `gain_staging.c`. Zero
  external callers; LTO can now fully inline into the single
  caller. Header prototype removed.
- **`bandscope.c` memmove pair consolidated.** Two consecutive
  memmoves on different buffers replaced with one combined loop.
- **`SIGNAL_CLASSIFIER_Init` removed.** Function only set
  `prev_rssi = -127` (the rest of the struct was BSS-zero-default).
  Now relies on BSS zero-init; the worst case is one extra NOISE
  classification on the first signal post-boot before the algorithm
  self-corrects to FAST / NORMAL / SLOW. The main.c call site
  removed too.
- **CSS scanner CDCSS/CTCSS arms merged** in
  `SCANNER_TimeSlice10ms`. Once CTCSS dropped to single-match (see
  Fixed section above), the two arms became structurally identical
  and collapse into a single result-handling block, parameterised
  only by which DCS table to query and which CodeType to assign.

### Changed (License header enforcement sweep)

- Every VUURWERK-original source module now carries the canonical
  dual-license header including the explicit commercial-licensing
  contact line. 51 files normalised in one sweep: 22 had the v1.2.6
  canonical header (missing the contact line) and were updated;
  another 8 had non-canonical or SPDX-only headers and were rewritten
  with the canonical block (preserving any technical descriptive
  content as a separate comment immediately after); `battery_sag.c`
  needed manual layout adjustment.
- **LICENSE Dual-Licensing Notice section clarified** to make the
  complete-firmware-GPL-v3 / extracted-module-commercial boundary
  unmistakable. The notice now explicitly enumerates what "outside
  the complete VUURWERK firmware" means (extraction, porting,
  repackaging, commercial use) and confirms that marker-block
  contributions in upstream-derived files (app/app.c, app/main.c,
  app/spectrum.c, ui/main.c, ui/status.c, ui/welcome.c, main.c,
  misc.c) are protected by the LICENSE contributions list. The
  contributions list above the Dual-Licensing Notice delimiter is
  byte-identical (LAW 7).
- **README License section** added near the top with the same
  boundary expressed in operator-facing language.
- **Zero flash impact** -- all header sweep changes are comments,
  stripped by the preprocessor before codegen.

### Released

- `vuurwerk-v1.2.7.packed.bin`: 60,790 bytes, SHA-256:
  1e1486c27baefce73d817dec45053914a7a128b8f8af92b01c8760bf270740b0
- Shipped to `release/` on the dev repository.
GitHub에서 보기 ↗
v1.2.4 VUURWERK v1.2.42026. 4. 17.
릴리스 노트
Bugfix release addressing three community-reported issues.

## Fixed

**Spectrum analyzer freeze on entry.** The `scanStepBWRegValues[]` array was missing three entries for the larger scan steps (25 kHz, 50 kHz, 100 kHz), causing an out-of-bounds read on entry with the default scan step. Combined with a no-timeout wait loop in `GetRssi()`, this hung the radio requiring a battery pull. Fixed the array size, added a 50-iteration timeout to `GetRssi()`, and corrected the return type of `GetBWRegValueForScan()` from uint8_t to uint16_t (a latent bug that was silently truncating filter bandwidth register values). Thanks to JoseSoler (https://github.com/JoseSoler) for the detailed root-cause analysis and exact code fix in issue #5.

**Channel name drift in Dual Watch.** After 4+ hours of Dual Watch operation, the displayed channel name would switch to Channel 10's name on both VFOs, while RX continued correctly on the saved channels. A defensive guard has been added to the display path with a trip counter visible on the About screen while root cause investigation continues for v1.2.5. Thanks to rieschrispy (https://github.com/rieschrispy) for the detailed reproduction steps in issue #4.

**About screen now accessible from the CONFIG menu.** Previously About was hidden behind a long-press gesture in the category picker that was not discoverable. About is now a regular menu item under CONFIG: scroll to it and press MENU. Thanks to ErikS-web (https://github.com/ErikS-web) for the feedback in issue #1.

## Flashing

Download `vuurwerk-v1.2.4.packed.bin` and flash it to your Quansheng UV-K5 using your preferred flasher. Flash size is 60,312 bytes with 1,128 bytes (1.84%) free.

## Field test request for issue #4

If you have been affected by the dual-watch name drift bug, please flash v1.2.4 and run your normal dual-watch setup for 4+ hours. When the symptom appears, open the About screen (Menu > CONFIG > About) and report the `GuardTrips` counter value on issue #4. This helps confirm the guard is catching the bug and provides data for the v1.2.5 root-cause fix.
GitHub에서 보기 ↗

올리기 전에커스텀 펌웨어는 개인이 만든 것이고 RadioCloud가 내용을 검증하지 않아요. 올리기 전에 UV-K5 도구로 캘리브레이션이 포함된 원본 EEPROM을 백업해 두세요. 허가받은 범위 밖 송신은 전파법 위반입니다.

README

VUURWERK

Custom firmware that turns a $30 Quansheng UV-K5 into a radio that listens, adapts, and responds like equipment ten times its price.

VUURWERK is Afrikaans for fireworks.

Buy Me A Coffee


See It In Action

Power on a VUURWERK radio and, after the boot banner, this is your home screen:

+--------------------------------+
| [Q|||]           [F]  [BATT##] |  <- status bar: signal quality, F key,
|                                |     battery (live even during TX)
| A  146.520.00       FM   H  N  |  <- VFO A: frequency, modulation,
|                                |     TX power, narrow/wide
| .:|.||:..|,.:|||,.:.|..:||:.,  |  <- bandscope: live RF activity
|                                |     on your frequency (F+7)
| B  446.000.00       FM   M     |  <- VFO B
|                                |
| 12.5kHz N FM                   |  <- context line: step, bandwidth, mode
+--------------------------------+

Stock firmware shows two frequencies and a battery icon. VUURWERK adds a live bandscope showing who is transmitting nearby, a signal-quality meter, and a context-aware bottom line that changes with what the radio is doing. When a signal comes in:

| RX S7 -65dBm Q:3 F             |  <- S-level, strength, quality, classifier

That trailing F is the signal classifier telling you this is a fast-rise FM signal (N = SSB, S = carrier, ~ = noise). The radio worked that out by measuring how quickly the signal appeared.

And this is the headline instrument -- the Voice-Seeking Spectrum (F+5, then STAR until the corner reads VOX):

+--------------------------------+
| -130/-50              [BATT##] |  <- status bar: dB range, battery
| 146.552.50        FM     VOX   |  <- listening frequency + mode label
|  .    .   .       .    .       |  <- top ticks: every hop-eligible bin
|           #            |       |
|      +--------------+  |       |     full bar  = strong voice (75+)
|  _.__|    LOCKED    |__|_,____ |  <- LOCKED banner flashes on PTT
|      +--------------+          |
| ...:....|....:...^,:....|....: |  <- tick rail + peak arrow (^)
| 145.760        >80.0k  148.960 |  <- span start, step, span end
+--------------------------------+

Only bins that score as human voice draw bars. UP/DOWN hops between them. PTT locks on. EXIT carries the frequency home to your VFO. No other UV-K5 firmware does this.


What Changes When You Flash This

You'll find voices, not just signals

VOX Voice-Seeking Spectrum scores every frequency bin for voice probability instead of raw strength, so carriers and birdies stay flat while conversations light up. The full hunt loop:

  SWEEP ----> voice found ----> LISTEN ----> UP/DOWN  seek next voice
    ^                             |            |
    |   voice gone (2 strikes)    |           PTT --> LOCKED (stay put)
    +-----------------------------+            |         |
                                               |       UP/DOWN releases
                                          EXIT +- LOCKED? -+
                                               |           |
                                          back on your     frequency CARRIES
                                          VFO, as it was   to your VFO
  • Seek: UP walks to the next voice above the cursor, DOWN below. No voice that way? The keys fall through to normal band navigation, so they always move you. Hold a key and the radio patrols the band, auto-stopping on voice.
  • Lock: tap PTT while listening -- a LOCKED banner flashes and the radio parks there through any pause in the conversation, squelch open.
  • Carry-over: exit while locked (in frequency mode) and the locked frequency becomes your VFO frequency. You leave the spectrum already tuned, ready to answer.

Deterministic spectrum exit. Leaving the spectrum always lands you back on your own VFO, on your own frequency, hearing normally -- lock or no lock, dual watch or not.

Adaptive scan pre-checks each channel in ~30 ms and only dwells on channels showing energy, so scanning an empty band runs 2-3x faster with weak-signal sensitivity unchanged. Tone-coded memory channels get a longer dwell so the decoder actually has time to confirm the tone.

Bandscope (F+7) keeps a live RF activity strip on the main screen, with peak dots and a noise-floor line, without interrupting audio.

You'll sound better to everyone listening

TX Compressor rides your mic gain in real time -- transparent at normal speaking level, smoothly catching shouts and close talking.

CTCSS Lead-In mutes the mic for the first 150 ms of every transmission so the repeater decodes your tone before your first syllable. No more clipped words.

TX Soft Start ramps power on an S-curve over 60 ms, killing the key-up click other radios hear.

You'll get out of trouble with one gesture

F+EXIT = reset to simplex. A VFO that lights the green RX light but stays silent almost always has a leftover setting: an RX tone waiting for a match, a repeater offset, reverse, a scrambler. F+EXIT wipes the active VFO back to a clean simplex state (tones cleared, offset cleared, reverse off, scrambler off, FM) and shows a SIMPLEX toast. Memory channels are never touched.

   deaf VFO?    [F] + [EXIT]  -->  +---------+
   green light                     | SIMPLEX |   clean slate:
   but silent                      +---------+   RX = TX, FM, no tones

You'll hear stations you couldn't before

Smart squelch scores every signal for voice probability using three hardware measurements at once -- it opens for voices and stays shut for pagers, glitches, and noise, and it can ease the threshold for a weak voice before the squelch even opens.

FM Gain Staging adapts the receiver front end to signal strength in real time, so strong signals come in clean and weak ones are not buried.

Squelch Tail Elimination mutes the "KSSHHH" at the end of the other station's transmission -- for both CTCSS and DCS.

You'll spend less time in menus

One-press F-key shortcuts for everything you change often, each confirmed by a 1-second toast:

F+1  BAND     cycle bands        F+6  POWER     LOW / MID / HIGH
F+2  A/B      swap VFOs          F+7  BANDSCOPE on / off
F+3  VFO/MR   freq <-> memory    F+8  REVERSE   repeater reverse
F+4  SQUELCH  level 0-9          F+9  CALL FREQ jump to calling freq
F+5  SPECTRUM full analyzer      F+0  MODE      FM / AM / USB
                    F+EXIT  RESET TO SIMPLEX

A categorized menu (7 groups, number keys jump straight in) with a plain-language hint line that explains cryptic items while you browse.

It looks after itself

A boot-time health probe checks the transceiver chip and calibration EEPROM at every power-on and reports faults in plain text. The battery indicator stays live during TX and a sag tracker warns you when your pack is tiring. The flashlight auto-extinguishes after 30 minutes so a pocket press never drains your pack overnight. The backlight fades out instead of cutting to black and stays lit while you are actually talking or listening.

You can program it from your computer

CHIRP support via a community-contributed driver -- read and write channels, side-keys, and settings without flashing back to stock. See chirp/README.md for the one-time setup. Driver contributed by mjwgeek.


What Makes This Different

Stock firmware is open-loop: you set fixed values and hope they work. VUURWERK is closed-loop: the radio measures what is actually happening -- noise floor, signal strength, audio level, signal type -- and adjusts itself in real time. It's the difference between holding the wheel straight with your eyes closed and actually watching the road.

Original innovations. Intelligence-based squelch with voice-probability scoring, voice-seeking spectrum analysis with PTT lock and frequency carry-over, FM adaptive gain staging, universal squelch-tail elimination, real-time TX audio compression. These aren't ports of existing features. See LICENSE for the original-contributions registry and FEATURES.md for the technical deep dive.


Flash It In 60 Seconds

 [download] --> [radio off] --> [hold PTT + power on] --> [LED lit?]
                                                              |
 [power cycle] <-- [flash ~10s] <-- [pick .packed.bin] <-- [cable in,
      |                              in Chrome flasher      Chrome open]
   VUURWERK
   boot screen
  1. Download vuurwerk-v1.5.0.packed.bin from the release/ folder
  2. Turn the radio off
  3. Hold PTT and turn it on -- the flashlight LED confirms bootloader mode
  4. Connect your programming cable (standard Kenwood-style 2-pin)
  5. Open https://egzumer.github.io/uvtools/ in Chrome
  6. "Select firmware file" -> choose the .packed.bin -> "Flash firmware"
  7. Wait about 10 seconds, disconnect, power cycle

Chrome is required (the Web Serial API doesn't work in Firefox or Safari). Your channels and settings are preserved -- only the firmware changes. Full details and troubleshooting: FLASHING.md.


Hardware Compatibility -- UV-K5 V1 Only

VUURWERK only supports the original Quansheng UV-K5 V1 (DP32G030 processor). The newer V2 (PY32F030) and V3 (PY32F071) boards are not compatible; flashing them produces a radio that does not boot (recoverable with the right stock firmware, but avoid the trip).

How to check: remove the battery and read the board label. V2 and V3 boards are marked; no marking means V1 -- the one VUURWERK supports.

If you flashed the wrong hardware, recover with K5TOOL, which supports all UV-K5 versions.


Built By

Firmware design and architecture: James Honiball (KC3TFZ) Based on: Egzumer, with credits to DualTachyon, OneOfEleven, fagci

See LICENSE for full attribution and the complete list of VUURWERK-original contributions.


Support VUURWERK

VUURWERK is free and built nights and weekends by one operator on a $30 radio. If the spectrum found you a conversation, or F+EXIT rescued a deaf VFO, you can keep the bench powered and keep going on this:

Buy Me A Coffee

Buy Me a Coffee QR code
Reading this on a desktop? Scan with your phone.

Prefer crypto, or want to help without spending a cent? See DONATE.md for XRP and the free ways to support the project.


Documentation


License

VUURWERK is dual-licensed.

Before you borrow code: the VUURWERK-original features listed in LICENSE are licensed as a package with the complete firmware. Taking an individual feature, algorithm, or module into another project or product requires written permission (a commercial license) from the author. Read the notice at the top of LICENSE first.

The complete VUURWERK firmware is distributed under the GNU General Public License v3. The upstream Egzumer / DualTachyon code it builds on is licensed under the Apache License 2.0, which is compatible with GPL v3; upstream files keep their Apache-2.0 notices. You may flash it, fork it, modify it, and redistribute the complete firmware under GPL v3 terms.

VUURWERK-original algorithms and modules (listed in the LICENSE contributions registry) are additionally protected by a commercial-license requirement for any use outside the complete VUURWERK firmware. Extracting a VUURWERK-original file, porting a VUURWERK-original algorithm to another platform, or incorporating VUURWERK-original code into a separate project requires a commercial license obtained in writing from James Honiball (KC3TFZ).

Commercial licensing inquiries: [email protected]

Stock upstream code (Egzumer, DualTachyon, OneOfEleven, fagci) remains under its original license terms as marked in each file.


Dedicated to George Thomas Honiball, ZS6NE (Silent Key). He is a silent key now, but not in and through me.

VUURWERK (Afrikaans: fireworks) -- because your radio should light up.

댓글 0

로그인하고 댓글을 남겨 보세요.